Переименование потоков в Java

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

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

Просто любопытно - а разве плохо названные темы никого не раздражают?

Elijah 22.01.2009 02:48

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

Steve Kuo 22.01.2009 03:05

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

Elijah 22.01.2009 06:17
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
12
3
9 977
7
Перейти к ответу Данный вопрос помечен как решенный

Ответы 7

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

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

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

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

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

Ответ принят как подходящий

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

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

Обновлено: добавить обратно текст, который каким-то образом исчез с конца

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

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

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

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

Thread.currentThread().setName("MyThread");

Другие вопросы по теме