package com.zelmex.svetofor;
public class TrafficLight {
private static final Object lock = new Object();
private static String currentColor = "Red";
public static void main(String[] args) {
Thread red = new Thread(new Light("Red", "Yellow"), "RedLight");
Thread yellow = new Thread(new Light("Yellow", "Green"), "YellowLight");
Thread green = new Thread(new Light("Green", "Red"), "GreenLight");
red.start();
yellow.start();
green.start();
try {
red.join();
yellow.join();
green.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Светофор завершил работу. Всего переключений: 12");
}
static class Light implements Runnable {
private String myColor;
private String nextColor;
Light(String myColor, String nextColor) {
this.myColor = myColor;
this.nextColor = nextColor;
}
public void run() {
for (int i = 1; i <= 4; i++) {
synchronized (lock) {
while (!currentColor.equals(myColor)) {
try {
lock.wait();
} catch (InterruptedException e) {
return;
}
}
System.out.println(myColor + " горит " + i + " раз");
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
return;
}
currentColor = nextColor;
lock.notifyAll();
}
}
}
}
}