Я использую 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
Другой мой вопрос, я полагаю, заключается в том, думают ли люди, что поступать так - плохая идея. Стоит ли мне опасаться обновлять имя пула потоков таким образом?
Спасибо за любые предложения!