Загрузка данных


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();
                }
            }
        }
    }
}