我正在开发一个越来越大的项目,许多不同进程使用的活动线程数正在增加.最近,我一直在仔细研究调试器中正在运行的线程,我注意到很多我的第三方库给它们的线程命名很差--Timer-0,qtp0等等.我想让其他开发人员不熟悉使用命名不佳的线程立即知道正在运行的是什么.
而不是为我们正在使用的库编写补丁,有没有人知道如何重命名正在运行的线程?或者,如果这是一个好主意?任何建议,将不胜感激.
是的,您可以使用setName()方法更改线程的名称.
至于它是否是一个好主意,没有确切的说明,但依赖于线程名称除了人类可读的描述之外的其他任何东西都是一个非常糟糕的决定,大多数图书馆都不会这样做.因此,如果重命名它们,它不可能破坏任何东西.
如果问题出在开源库中,那么最好的解决方案是为这些产品提供补丁以获得更好的线程命名.除非运行安全管理器,否则可以通过枚举线程(正如其他人提到的那样)重命名任何线程,并为每个线程应用任意名称,但这是命名不属于您自己的线程的脆弱方式.如果第三方库更改了命名,则必须更改代码.
我同意具有命名不佳的线程的第三方库更难以理解应用程序中发生的情况.但是从第三方库重命名线程是有风险的.如果他们的下一个版本改变了他们命名线程的方式会怎样?你如何处理第三方库,它根本没有尝试命名线程?
编辑:添加从最后以某种方式消失的文本
我命名我创建的所有线程.我有太多的应用程序泄漏线程,或者让线程失控.
您将Java视为操作系统越多,就越容易管理.:)
更改Java线程名称
Thread.currentThread().setName("MyThread");