Справочное руководство по использованию приложения.
Приложение спроектировано с использованием паттерна произоводитель - потребитель, при соблюдении принципов SOLID, DRY, KISS и YAGNI. Основные элементы архитектуры приложения:
- Сущность информация (сообщение) - то, что передается и обрабатывается. По условию задания:
- должна быть возможность задать/получить идентификатор группы;
- должна быть возможность задать/получить идентификатор сообщения;
- должна быть возможность задать/получить содержимое сообщения;
- должен быть метод, который выводит информацию о сообщении.
- Очередь - то, что хранит информацию. Интерфейс для работы с очередью:
- получение очередного элемента в группе (по условию);
- проверка пустая ли очередь в заданной группе;
- поместить элемент в очереди.
- Поток, который что-то выполняет. У каждого потока есть имя, каждый поток работает с определенными идентификаторами групп (по заданию: "...Элементы разных групп могут обрабатываться параллельно...Максимальное количество потоков ограничено, задается при старте обработчика и в общем случае меньше числа групп. Обеспечить равномерную обработку групп элементов: наличие в очереди групп с большим количеством элементов не должно приводить к длительным задержкам в обработке других групп..."). То есть вариант, при котором мы просто получаем последовантельно элементы из очереди на обработку не подойдет (элементы могут быть помещены неравномерно в очередь, например в LinkedBlockingQueue) и нам надо знать список групп, с которыми мы работаем. Каждый поток можно запустить, остановить, получить идентификаторы групп, с которыми работает поток, и задать имя потока.
Приложение написано с использованием принципов DRY - ни один класс не дублирует обязанности другого.
Приложение написано с использованием принципов KISS - реализации соответствующих методов классов просты и малы с точки зрения объемов кода.
Приложение написано с использованием принципов YAGNI - ни в одном классе нет избыточного функционала (кроме вставок сна потоков, что сделано для более наглядной демонстрации).
Приложение реализовано с помощью java util concurrent.