Skip to content

Latest commit

 

History

3 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Program Supervisor Simulation

Учебный проект на Java, демонстрирующий работу с потоками (Thread), состояниями и синхронизацией (wait/notifyAll). Симулирует «программу» со случайно меняющимся состоянием и «супервизора», который следит за ней и перезапускает при сбоях.

Стек

  • Java
  • Многопоточность: Thread, synchronized, wait()/notifyAll()
  • Пакет org.example, структура src/main/java (совместима с Maven-раскладкой, но может запускаться и без сборщика — напрямую из IntelliJ IDEA)

Как запустить

  1. Открыть проект в IntelliJ IDEA
  2. Запустить класс Main (кнопка Run ▶️)
  3. В консоли будут появляться сообщения о смене состояния программы и реакции супервизора

Как это работает

  • 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

Автор

dymonwesa

About

lab for university exam

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages