Как с помощью ThreadPoolExecutor получить имя потока, работающего в пуле потоков?

Я использую ThreadPoolExecutor в Java для управления множеством запущенных потоков. Я создал свою простую ThreadFactory , чтобы дать потокам более удачные имена.

Проблема в том, что имя задается в потоке при первом создании пула потоков и не привязано к задаче, которую фактически выполняет пул потоков. Я понимаю это ... мои Runnables и Callables - хотя у них есть имена - на самом деле являются на один уровень абстракции ниже выполняемых потоков ThreadPoolExecutor .

На StackOverflow были и другие вопросы о создании имен для пулов потоков ThreadPoolExecutor . (См. Как дать имя вызываемому потоку? и Как назвать потоки пула потоков в Java .)

Я хочу знать, есть ли у кого-нибудь хорошее решение для синхронизации имени потока пула потоков с Runnable, который он на самом деле запущен?

т.е. Если я вызову Thread.getCurrentThread (). GetName () , я бы хотел, чтобы не возвращал имя пула потоков верхнего уровня, а имя вызываемого / Выполнить, что поток в настоящее время запущен.

Поскольку это в основном предназначено для отладки и ведения журнала, я стараюсь избегать решения, которое включает в себя добавление нового кода в каждый Runnable, который может быть отправлен в ThreadPoolExecutor - я бы предпочел просто поместить код в ThreadFactory или оберните сам ThreadPoolExecutor, чтобы изменения выполнялись в одном месте. Если такого решения не существует, я, вероятно, не буду беспокоиться, поскольку это не критично.

begin edit Чтобы уточнить, я знаю, что могу поместить Thread.currentThread (). SetName ("мое имя для запуска"); в качестве первой строки каждого метода выполнения Runnable, но я Я стараюсь этого не делать. Я здесь перфекционист и понимаю это, поэтому не обижусь, если люди захотят прокомментировать этот вопрос и сказать мне об этом. end edit

Другой мой вопрос, я полагаю, заключается в том, думают ли люди, что поступать так - плохая идея. Стоит ли мне опасаться обновлять имя пула потоков таким образом?

Спасибо за любые предложения!

10
задан Community 23 May 2017 в 12:02
поделиться