Можно ли выбрать конкретный поток для выполнения аналогичных задач в пуле потоков в java?

#java

Вопрос:

Например, у меня есть пул потоков из 8 потоков, я хочу, чтобы 4 аналогичные задачи выполнялись потоком 1 в пуле, другие 4 задачи выполнялись потоком 2 в пуле и так далее

Комментарии:

1. Можете ли вы подробнее объяснить, почему так важно, в каком потоке выполняется определенная инструкция?

2. Спасибо за ответ, потому что на основе названия темы я хочу выполнять разные действия.

3. Создайте несколько пулов потоков для каждой группы задач

4. Добавив комментарий @ErwinBolwidt, вы можете использовать одного исполнителя потока для каждой группы задач. Документация гарантирует, что представленные задачи на каждом исполнителе одного потока будут выполняться последовательно. Вы также можете рассмотреть возможность использования Map<String, ExecutorService> функции, которая будет сопоставлять пользовательские имена с пулами потоков.

5. это означает, что я должен создавать отдельные пулы для групп задач, но другого способа нет ? чтобы выбрать конкретный поток в пуле, когда я отправляю задачи в пул

Ответ №1:

Можно ли выбрать конкретный поток для выполнения аналогичных задач в пуле потоков в java?

Нет. По крайней мере, не используя ни одну из стандартных ExecutorService реализаций Java SE.

Конечно, вы могли бы реализовать свой собственный пул потоков с нуля, который назначал задачи потокам в пуле любым выбранным вами способом. Это просто много сложного кода для написания, отладки и обслуживания.


Ваша причина, по которой вы этого хотите, кажется мне надуманной. (Это похоже на проблему XY.)

…. потому что на основе имени потока я хочу выполнять разные действия.

Есть и другие способы достижения этой цели:

  • Вы можете использовать a ThreadLocal для хранения условного имени, и ваши задачи установят его, когда они начнутся.
  • Ваши задачи могут вызывать Thread.setName() текущий поток при запуске 1.
  • Вы можете просто сохранить условное имя в переменной в объекте вашей задачи.
  • Вы можете просто использовать несколько пулов потоков и отправлять их в разные в зависимости от действия, которое вы хотите выполнить.

Обратите внимание, что, планируя определенные задачи для одного именованного потока, вы создадите узкое место для параллелизма для этих задач.


1 — ИМО, этот конкретный вариант воняет …