Переименование потоков в Java - PullRequest
11 голосов
/ 22 января 2009

Я работаю над проектом, который постепенно становится все больше и больше, и число активных потоков, используемых многими различными процессами, увеличивается. В последнее время я более внимательно изучал запущенные потоки в отладчике и заметил, что многие из моих сторонних библиотек дали очень плохие имена своим потокам - Timer-0, qtp0 и т. Д. Я хочу, чтобы другие разработчики были незнакомы. с плохо названными потоками, чтобы мгновенно узнать, что работает.

Вместо того, чтобы писать патчи для библиотек, которые мы используем, кто-нибудь знает, как переименовать запущенные потоки? Или это даже хорошая идея? Любые предложения будут оценены.

Ответы [ 7 ]

6 голосов
/ 22 января 2009

Если проблема в библиотеках с открытым исходным кодом, то лучшим решением будет поставка исправлений для этих продуктов для лучшего именования потоков. Запустив диспетчер безопасности, вы можете переименовать любой поток, перечислив потоки (как уже упоминали другие) и применив к каждому произвольное имя, но это хрупкий способ именования потоков, которые не принадлежат вам. Если сторонняя библиотека изменит свое имя, вам придется изменить свой код.

Я согласен, что сторонние библиотеки с плохо названными потоками затрудняют понимание того, что происходит в вашем приложении. Но переименование потоков из сторонней библиотеки рискованно. Что произойдет, если их следующий выпуск изменит способ именования потоков? И как вы обращаетесь со сторонней библиотекой, которая вообще не пытается назвать потоки?

РЕДАКТИРОВАТЬ: добавить обратно текст, который как-то исчез с конца

6 голосов
/ 22 января 2009

Да, вы можете изменить имя потока с помощью метода setName () .

Что касается того, является ли это хорошей идеей, точно сказать нечего, но полагаться на имя потока для чего-либо, кроме понятного человеку описания, было бы очень плохим решением, и большинство библиотек этого не сделают. Таким образом, вряд ли что-то сломается, если вы их переименуете.

5 голосов
/ 27 сентября 2016

Изменить имя потока Java

Thread.currentThread().setName("MyThread");
5 голосов
/ 26 января 2009

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

Чем больше вы относитесь к java как к операционной системе, тем легче ей управлять. :)

3 голосов
/ 22 января 2009

Вы можете использовать Thread.enumerate() или Thread.getAllStackTraces(), чтобы получить список запущенных потоков. Затем вы можете позвонить Thread.setName() на каждого.

Я не могу сказать вам, хорошая это идея или нет, но я, вероятно, склоняюсь к "нет". Чем больше кода вы пишете, тем больше кода вы должны поддерживать.

1 голос
/ 17 апреля 2009

В связи с этим возникает вопрос о передовых практиках в отношении соглашений о наименовании потоков. Я не видел никаких советов сообщества в этом отношении.

1 голос
/ 22 января 2009

setName() может использоваться для изменения имени потока, но вам нужно каким-то образом определить, как должен называться поток.
getAllStackTraces() позволит программе создать пример трассировки стека и использовать имена классов / методов / имен файлов в качестве подсказки относительно того, что вызывать поток.

...