Я использую ThreadPoolExecutor
в Java для управления большим количеством запущенных потоков. Я создал свой собственный простой ThreadFactory
, чтобы я мог дать нитям лучшие имена.
Проблема заключается в том, что имя задается в потоке при первом создании пула потоков и не привязано к задаче, которую фактически выполняет пул потоков. Я понимаю это ... мои Runnables и Callables - хотя у них есть имена - на самом деле являются одним уровнем абстракции по сравнению с запущенными потоками ThreadPoolExecutor
.
В StackOverflow были и другие вопросы о создании имен для ThreadPoolExecutor
пулов потоков. (См. Как дать имя вызываемому потоку? и Как назвать потоки пула потоков в Java .)
Что я хочу знать: есть ли у кого-нибудь хорошее решение для синхронизации имени потока пула в синхронизации с Runnable, в котором он фактически работает?
т.е. Если я вызову Thread.getCurrentThread().getName()
, я бы хотел, чтобы не возвращал имя пула потоков верхнего уровня, а скорее имя Callable / Runnable, которое поток в данный момент выполняет.
Поскольку это главным образом для целей отладки и ведения журнала, я стараюсь избегать решения, которое включает в себя добавление нового кода в каждый Runnable, который может быть передан в ThreadPoolExecutor - я бы предпочел просто поместить некоторый код в ThreadFactory или оберните сам ThreadPoolExecutor, чтобы изменение выполнялось в одном месте. Если такого решения не существует, я, вероятно, не буду беспокоиться, поскольку оно не имеет решающего значения.
начать редактирование Чтобы уточнить, я знаю, что могу поставить Thread.currentThread().setName( "my runnable name" );
в качестве первой строки метода run каждого Runnable, но я пытаюсь избежать этого. Я здесь перфекционист, и я это понимаю, поэтому я не буду обижаться, если люди захотят прокомментировать этот вопрос и скажут мне об этом. конец редактирования
Мой другой вопрос, я полагаю, заключается в том, считают ли люди плохой идеей делать такие вещи. Стоит ли с осторожностью обновлять имя пула потоков, как это?
Спасибо за любые предложения!