Главный поток java управляет запуском других потоков
Я бы описал мою проблему:
Я разрабатываю приложение для создания документов (документы Office) в асинхронном режиме, поэтому я использую потоки
из-за ограничений производительности я должен запускать только 2 потока одновременно,
Чтобы не блокировать пользователя на запуск генерации документов во время работы двух потоков, я подумал о разработке основного потока, содержащего объект ArrayDeque в качестве стека потоков, где пользователь может добавить запрос на создание (как объект, реализующий интерфейс Collable или Runnable) и использовать API-интерфейс Concurrent для запуск темы в режиме FIFO
Вопросы:
Как можно обеспечить запуск основного потока в качестве единого для всех пользователей?
Как я могу вызвать ArrayDeque в главном рабочем потоке
1 ответ
Похоже, простой случай использования ExecutorService
с пулом из двух потоков:
class Task implements Runnable {
...
}
ExecutorService exec = Executors.newFixedThreadPool(2);
exec.submit(new Task()); // submit task to the queue for asynchronous processing
ExecutorService
будет инкапсулировать пул потоков и рабочую очередь. Поток автоматически подберет новую работу, когда завершит предыдущие задачи.