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




Вы можете использовать Thread.enumerate() или Thread.getAllStackTraces(), чтобы получить список запущенных потоков. Затем вы можете вызвать в Thread.setName() по каждому из них.
Я не могу сказать, хорошая это идея или нет, но я бы, вероятно, склонился к «нет». Чем больше кода вы напишете, тем больше кода придется поддерживать.
Да, вы можете изменить имя потока с помощью метода Имя набора().
Что касается того, является ли это хорошей идеей, то нельзя сказать наверняка, но полагаться на имя потока для чего-либо, кроме удобочитаемого описания, было бы очень плохим решением, и большинство библиотек этого не сделают. Таким образом, вряд ли что-нибудь сломается, если их переименовать.
setName() можно использовать для изменения имени потока, но у вас должен быть способ определить, как поток должен называться.
getAllStackTraces() позволит программе на примере трассировки стека использовать имена классов / методов / файлов в качестве подсказки относительно того, что вызывать поток.
Если проблема связана с библиотеками с открытым исходным кодом, лучшим решением будет установка исправлений для этих продуктов для лучшего именования потоков. Запретив запуск диспетчера безопасности, вы можете переименовать любой поток, перечислив потоки (как упоминали другие) и присвоив каждому произвольное имя, но это хрупкий способ именования потоков, которые не являются вашими собственными. Если сторонняя библиотека изменит свое название, вам придется изменить свой код.
Я согласен с тем, что сторонние библиотеки с плохо названными потоками затрудняют понимание того, что происходит в вашем приложении. Но переименование потоков из сторонней библиотеки рискованно. Что произойдет, если в их следующем выпуске изменится способ именования потоков? И как вы работаете со сторонней библиотекой, которая вообще не пытается называть потоки?
Обновлено: добавить обратно текст, который каким-то образом исчез с конца
Я называю все создаваемые мною темы. У меня было слишком много приложений, у которых возникали утечки потоков или потоки выходили из-под контроля.
Чем больше вы относитесь к java как к операционной системе, тем проще ею управлять. :)
Возникает вопрос о лучших практиках в отношении соглашений об именах для потоков. Я не видел никаких рекомендаций сообщества по этому поводу.
Изменить имя потока Java
Thread.currentThread().setName("MyThread");
Просто любопытно - а разве плохо названные темы никого не раздражают?