Как сделать асинхронное выполнение потока в Java? - PullRequest
0 голосов
/ 26 июня 2018

Я работаю над упражнением по кодированию, в котором мне нужно создать каркас ведения журналов в Java. Шаги для регистрации аналогичны Log4J, т. Е. 1. Сообщение обрабатывается процессором. 2. Сообщение добавляется в IO, в файл или на сервер пользователем.

Требуется, чтобы класс обрабатывал несколько потоков одновременно (асинхронный способ). Класс имеет два метода log () - используются для регистрации и shutdown () - для завершения. У меня есть объекты message_processor и appender, но этот процесс должен выполняться в порядке FIFO.

Моя работа - это когда log () вызывается message_processor обрабатывает сообщение, которое очень трудоемкий процесс , а затем обработанное сообщение добавляется и регистрируется.

У меня есть грубая идея: мне нужно создать статическую структуру данных, в которой я буду добавлять поток и его ключ. Я буду продолжать добавлять всякий раз, когда вызывается log (). После добавления в мою структуру данных я начну поток и продолжу проверять, завершен поток или нет. Когда поток завершен, и у потока, который завершен, нет предшественников, я добавлю его, иначе я буду ждать завершения предшественников. Если поток завершен или нет, я должен поддерживать флаг.

Log () будет порождать потоки для обработки сообщений и будет ждать, пока потоки завершат свою задачу, а когда поток завершится, log () добавит сообщения по порядку. Структура данных будет считываться и записываться несколькими потоками одновременно.

  1. Мой вопрос заключается в том, какую структуру данных мне следует использовать для реализации такого рода функций в Java. Для этого флага я должен создать класс Java, который реализует интерфейс Runnable, или существует какая-либо структура данных, которая обладает такими функциональными возможностями?

  2. Эффективна ли идея реализовать асинхронную многопоточность?

Любые предложения приветствуются.

1 Ответ

0 голосов
/ 28 июня 2018

Я думаю, вы должны использовать параллельные структуры данных, предоставляемые фреймворком, а не делать вашу реализацию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...