·
2 commits
to master
since this release
📦 DOC Version Control Editor v3.0
ЛР №3 (Вариант 9) – «Основы многопоточности в Java»
Java 23 + Swing + Concurrency
Полноценный мониторинг многопоточной обработки «версионного редактора» на базе producer–consumer:
генерация запросов, буфер запросов, пул рабочих, сбор статистики и GUI-дешборды.
✨ Основные возможности
- Генерация запросов
–ClientGenerator
порождает пачки запросов (CHANGE_TEXT
,UNDO
,REDO
,REVERT
) с настраиваемой задержкой и джиттером - Потокобезопасная очередь
–RequestQueue
на основеLinkedBlockingQueue<Request>
- Обработка запросов
–WorkerPool
с фиксированным числом потоков-воркеров (Worker
), выполняющих команды надDocument
- Сбор метрик
–StatsAggregator
,ClientStat
,WorkerStat
собирают задержки, количество и состояние (busy/idle) - Графический мониторинг
–SystemMonitorGUI
с вкладкамиQueueDashboard
(график и таблицы) иLogsPanel
(реактивный лог) - Graceful shutdown
– Poison-pill (SHUTDOWN
) для корректного завершения воркеров и генераторов
🏗️ Архитектура и ключевые компоненты
Категория | Тип | Классы / Компоненты | Роль |
---|---|---|---|
Generator | Producer threads | ClientGenerator , ClientConfigFactory , ClientConfig |
Порождают запросы с задержкой и джиттером |
Queue | Shared buffer | RequestQueue |
Потокобезопасный буфер (LinkedBlockingQueue<Request> ) |
Worker | Consumer threads | Worker , WorkerPool |
Обрабатывают запросы, выполняют DocumentCommand |
Engine | Orchestrator | ConcurrencyEngine |
Старт/стоп генераторов и пула воркеров |
Statistics | Aggregator | StatsAggregator , ClientStat , WorkerStat |
Сбор и агрегация метрик: delay, throughput, busy/idle |
GUI | Monitoring UI | SystemMonitorGUI , QueueDashboard , LogsPanel |
Визуализация очереди, таблиц, гистограмм и логов |
Core domain | GoF-паттерны & DTO | Document , DocumentHistoryLogger , команды (ChangeText, Undo, Redo, Revert), декораторы |
Бизнес-логика версионного редактора, повторное использование |
👀 Быстрый тур по интерфейсу
- Ввод параметров запуска
- программа запрашивает значения для:
- количества клиентов
- количества потоков-исполнителей
- ёмкости очереди
- общего числа заявок
- программа запрашивает значения для:
- Вкладка Queue
- сверху — прогресс выполнения всех заявок
- слева — таблица клиентов с количеством сгенерированных заявок и средней задержкой
- справа — таблица исполнителей (воркеров): сколько обработано, текущий статус
- справа внизу — список всех заявок по мере поступления
- Queue при полной загрузке
- пример: 5 клиентов, 3 воркера, 120 заявок — все успешно выполнены
- Вкладка Logs
- живая консоль с действиями — например, создание снимков состояния (
CREATE core.memento
)
- живая консоль с действиями — например, создание снимков состояния (
🔧 Как расширять
Нужно | Что добавить / изменить |
---|---|
Новый тип запроса (e.g. SAVE, LOAD) | Добавить значение в RequestType и соответствующую ветку в Worker.run() |
Альтернативная очередь | Заменить RequestQueue на другую реализацию BlockingQueue<Request> (e.g. PriorityBlockingQueue ) |
Доп. статистика | Расширить StatsAggregator и GUI (новые колонки/графики) |
Хранение статистики в БД | Имплементировать StatsAggregator через JDBC / JPA вместо in-mem |
Фильтрация и поиск в GUI | Добавить панели фильтрации по клиентам/воркерам, поиск по ID, диапазон времени |
Другой алгоритм генерации | Создать альтернативную версию ClientGenerator с новым паттерном burst/delay |
🧩 UML-диаграмма архитектуры проекта
📄 Отчёт по выполненной лабораторной работе
Полный текстовый отчёт оформлен в соответствии с требованиями.
Содержит описание задания, архитектуры, компонентов многопоточной системы и их взаимодействия.
Включает схемы потоков, описание критических секций, используемые инструменты синхронизации и способы их защиты.
Приведены скриншоты интерфейса (SystemMonitorGUI
), вкладок Queue
и Logs
, а также полная UML-диаграмма проекта.
Весь исходный код представлен в формате Consolas 10, без комментариев, с разбивкой по файлам и пакетам.