Как создать несколько пулов потоков, т. Е. Несколько исполнителей, каждый с одним потоком

В настоящее время мне нужно создать несколько потоков. Каждый пул потоков - это однопоточный пул потоков. Я назначаю задачи каждому пулу потоков в зависимости от условия. Поэтому мне нужно отслеживать потоки.

Как я могу это сделать? Могу ли я создать массив пулов потоков?

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,...]

И Исполнитель будет обрабатывать это последовательно.

Другие вопросы по тегам