package onewayStreet; public class CarFromSense2 extends Car { static int nCarsFromSense2untilSemaphore =0; static int nActiveCarsFromSense2 =0; public static synchronized int getnActiveCarsFromSense2() { return nActiveCarsFromSense2; } public static synchronized void setnActiveCarsFromSense2(int nCars) { CarFromSense2.nActiveCarsFromSense2 = nCars; } public static synchronized int getnCarsFromSense2untilSemaphore() { return nCarsFromSense2untilSemaphore; } public static synchronized void setnCarsFromSense2untilSemaphore(int nCars) { nCarsFromSense2untilSemaphore = nCars; } public CarFromSense2(int cid, onewayStreet o) { super(cid,o); } protected void crossOnewayStreet() { int varTimeToCross= getVariableTimeToCross(); int timeToCross= varTimeToCross +FixedCrossTime; try {Thread.sleep(varTimeToCross);} catch(InterruptedException e) {}; setnCarsFromSense2untilSemaphore(getnCarsFromSense2untilSemaphore()-1); sem2.release(); try {Thread.sleep(FixedCrossTime);} catch(InterruptedException e) {}; System.out.println ("Car carId:" + getCarId() + " took "+ timeToCross+" ms to cross oneWayStreet from Sense2. NrCarsFromSense2untilSem:" + getnCarsFromSense2untilSemaphore()+" NrActiveCarsFromSense2: "+getnActiveCarsFromSense2() +". BYE."); setnActiveCarsFromSense2(getnActiveCarsFromSense2()-1); } private synchronized void trytoCrossOneWayStreet() { while ((onewayStreet.getSense()!= FROM_SENSE2)||((onewayStreet.isYellow()== true))) { getO().waitToCross(); // up to nMaxCarsFromSense2toSemaphore may go in sense2 System.out.println ("Car carId:" + getCarId() + " notified from Sense2. Onewaystreet sense now: " + getO().displaySense() + " yellow? "+ onewayStreet.isYellow() + "."); } } public void run() { setnCarsFromSense2untilSemaphore(getnCarsFromSense2untilSemaphore()+1); setnActiveCarsFromSense2(getnActiveCarsFromSense2()+1); System.out.println ("Car carId:" + getCarId() + " Starts from Sense2. NrCarsUntilSem: "+getnCarsFromSense2untilSemaphore()+" : "+ getnActiveCarsFromSense2()+"."); try {sem2.acquire();} catch(InterruptedException e) {}; trytoCrossOneWayStreet(); crossOnewayStreet() ; } }