Учебный проект на Java, демонстрирующий работу с потоками (Thread), состояниями и синхронизацией (wait/notifyAll). Симулирует «программу» со случайно меняющимся состоянием и «супервизора», который следит за ней и перезапускает при сбоях.
- Java
- Многопоточность:
Thread,synchronized,wait()/notifyAll() - Пакет
org.example, структураsrc/main/java(совместима с Maven-раскладкой, но может запускаться и без сборщика — напрямую из IntelliJ IDEA)
- Открыть проект в IntelliJ IDEA
- Запустить класс
Main(кнопка Run▶️ ) - В консоли будут появляться сообщения о смене состояния программы и реакции супервизора
AbstractProgram— поток, представляющий «программу» с состоянием (ProgramState):UNKNOWN,RUNNING,STOPPING,FATAL_ERROR- Внутри
AbstractProgramживёт вложенныйDaemonThread— каждые 3 секунды (DAEMON_INTERVAL) случайно выбирает новое состояние изRUNNING,STOPPING,FATAL_ERRORи меняет его черезsetProgramState() setProgramState()синхронизирован и вызываетnotifyAll(), будя супервизораSupervisor— отдельный поток: запускаетAbstractProgram, затем в цикле ждёт (wait()) изменения состояния и реагирует:STOPPING→ переводит программу обратно вRUNNING(перезапуск)FATAL_ERROR→ прерывает себя и программу (interrupt())RUNNING→ просто логирует, что всё работает
src/main/java/org/example/
├── Main.java — точка входа, создаёт и запускает Supervisor
├── Supervisor.java — поток-наблюдатель за AbstractProgram
├── AbstractProgram.java — поток "программы" + вложенный DaemonThread, меняющий состояние случайно
└── ProgramState.java — enum состояний: UNKNOWN, STOPPING, RUNNING, FATAL_ERROR