Как создать несколько пулов потоков, т. Е. Несколько исполнителей, каждый с одним потоком
В настоящее время мне нужно создать несколько потоков. Каждый пул потоков - это однопоточный пул потоков. Я назначаю задачи каждому пулу потоков в зависимости от условия. Поэтому мне нужно отслеживать потоки.
Как я могу это сделать? Могу ли я создать массив пулов потоков?
ExecutorService executor = Executors.newSingleThreadExecutor();
Вот как мы создаем 1 пул потоков. Теперь я хочу создать 5 потоков.
ExecutorService[] executor;
for(int i=0;i<5;i++){
executor[i]= Executors.newSingleThreadExecutor();
}
Это нормально? Это правильный синтаксис? Если нет, можете ли вы предложить способ сделать это?
1 ответ
В вашем сценарии, я полагаю, что можно использовать только один однопотоковый исполнитель, поскольку согласно документации:
Создает Исполнителя, который использует один рабочий поток, работающий из неограниченной очереди. (Тем не менее, обратите внимание, что если этот единственный поток завершается из-за сбоя во время выполнения до завершения работы, то при необходимости для выполнения последующих задач его место занимает новый.) Задачи гарантированно выполняются последовательно, и не более одной задачи будет активной в любой момент времени. В отличие от эквивалентного newFixedThreadPool(1), возвращаемый исполнитель гарантированно не может быть реконфигурируем для использования дополнительных потоков.
Поэтому при множественном вводе от нескольких компаний очередь Исполнителя будет выглядеть так:
[Company1Task1, Company2Task1, Company1Task2, Company3Task1, Company1Task3,...]
И Исполнитель будет обрабатывать это последовательно.