import java.util.concurrent.locks.Condition;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
enum Light {RED, YELLOW, GREEN};
class TrafficLights
{
private Lock lock = new ReentrantLock();
private Condition red = lock.newCondition();
private Condition yellow = lock.newCondition();
private Condition green = lock.newCondition();
private Light light;
public TrafficLights(Light light){this.light = light;}
class RedLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.RED)
{
System.out.println("current is red , ready to turn green");
Thread.sleep(100);
light = Light.GREEN;
green.signal();
}
else
{
red.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
class YellowLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.YELLOW)
{
System.out.println("current is yellow, ready to turn red ");
Thread.sleep(100);
light = Light.RED;
red.signal();
}
else
{
yellow.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
class GreenLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.GREEN)
{
System.out.println("current is green , ready to turn yellow");
Thread.sleep(100);
light = Light.YELLOW;
yellow.signal();
}
else
{
green.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
}
public class Main6
{
public static void main(String[] args)
{
TrafficLights trafficLights = new TrafficLights(Light.GREEN);
TrafficLights.GreenLight greenLight = trafficLights.new GreenLight();
TrafficLights.YellowLight yellowLight = trafficLights.new YellowLight();
TrafficLights.RedLight redLight = trafficLights.new RedLight();
greenLight.start();
yellowLight.start();
redLight.start();
}
}
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
enum Light {RED, YELLOW, GREEN};
class TrafficLights
{
private Lock lock = new ReentrantLock();
private Condition red = lock.newCondition();
private Condition yellow = lock.newCondition();
private Condition green = lock.newCondition();
private Light light;
public TrafficLights(Light light){this.light = light;}
class RedLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.RED)
{
System.out.println("current is red , ready to turn green");
Thread.sleep(100);
light = Light.GREEN;
green.signal();
}
else
{
red.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
class YellowLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.YELLOW)
{
System.out.println("current is yellow, ready to turn red ");
Thread.sleep(100);
light = Light.RED;
red.signal();
}
else
{
yellow.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
class GreenLight extends Thread
{
public void run()
{
while(true)
{
lock.lock();
try
{
if(light == Light.GREEN)
{
System.out.println("current is green , ready to turn yellow");
Thread.sleep(100);
light = Light.YELLOW;
yellow.signal();
}
else
{
green.await();
}
}
catch(Exception e){}
finally{lock.unlock();}
}
}
}
}
public class Main6
{
public static void main(String[] args)
{
TrafficLights trafficLights = new TrafficLights(Light.GREEN);
TrafficLights.GreenLight greenLight = trafficLights.new GreenLight();
TrafficLights.YellowLight yellowLight = trafficLights.new YellowLight();
TrafficLights.RedLight redLight = trafficLights.new RedLight();
greenLight.start();
yellowLight.start();
redLight.start();
}
}