Я работаю над упражнением по кодированию, в котором мне нужно создать каркас ведения журналов в Java.
Шаги для регистрации аналогичны Log4J, т. Е. 1. Сообщение обрабатывается процессором. 2. Сообщение добавляется в IO, в файл или на сервер пользователем.
Требуется, чтобы класс обрабатывал несколько потоков одновременно (асинхронный способ). Класс имеет два метода log () - используются для регистрации и shutdown () - для завершения.
У меня есть объекты message_processor и appender, но этот процесс должен выполняться в порядке FIFO.
Моя работа - это когда log () вызывается message_processor обрабатывает сообщение, которое очень трудоемкий процесс , а затем обработанное сообщение добавляется и регистрируется.
У меня есть грубая идея: мне нужно создать статическую структуру данных, в которой я буду добавлять поток и его ключ. Я буду продолжать добавлять всякий раз, когда вызывается log ().
После добавления в мою структуру данных я начну поток и продолжу проверять, завершен поток или нет.
Когда поток завершен, и у потока, который завершен, нет предшественников, я добавлю его, иначе я буду ждать завершения предшественников. Если поток завершен или нет, я должен поддерживать флаг.
Log () будет порождать потоки для обработки сообщений и будет ждать, пока потоки завершат свою задачу, а когда поток завершится, log () добавит сообщения по порядку.
Структура данных будет считываться и записываться несколькими потоками одновременно.
Мой вопрос заключается в том, какую структуру данных мне следует использовать для реализации такого рода функций в Java. Для этого флага я должен создать класс Java, который реализует интерфейс Runnable, или существует какая-либо структура данных, которая обладает такими функциональными возможностями?
Эффективна ли идея реализовать асинхронную многопоточность?
Любые предложения приветствуются.