用Java重命名线程

时间:2009-01-21 22:06:47

标签: java multithreading naming

我正在开发一个越来越大的项目,并且许多不同进程使用的活动线程数正在增加。最近,我一直在仔细研究调试器中正在运行的线程,我注意到很多我的第三方库给它们的线程命名很差--Timer-0,qtp0等等。我想让其他开发人员不熟悉用命名不佳的线程立即知道正在运行的是什么。

有没有人知道如何重命名正在运行的线程,而不是为我们正在使用的lib编写补丁?或者,如果这是一个好主意?任何建议将不胜感激。

7 个答案:

答案 0 :(得分:6)

是的,您可以使用setName()方法更改帖子的名称。

至于它是否是一个好主意,没有必要确定,但依赖于线程名称除了人类可读的描述之外的其他任何东西都是一个非常糟糕的决定,大多数图书馆都不会这样做。因此,如果重命名它们,它不可能破坏任何东西。

答案 1 :(得分:6)

如果问题出在开源库中,那么最好的解决方案是为这些产品提供补丁以获得更好的线程命名。除非运行安全管理器,否则可以通过枚举线程(正如其他人提到的那样)重命名任何线程,并为每个线程应用任意名称,但这是命名不属于您自己的线程的脆弱方式。如果第三方库更改了命名,则必须更改代码。

我同意具有命名不佳的线程的第三方库更难理解应用程序中发生的情况。但是从第三方库重命名线程是有风险的。如果他们的下一个版本改变了他们命名线程的方式会怎样?你如何处理第三方库,它根本没有尝试命名线程?

编辑:添加以某种方式从最后消失的文本

答案 2 :(得分:5)

我命名我创建的所有线程。我有太多的应用程序泄漏线程,或者让线程失控。

您将java视为操作系统的次数越多,管理起来就越容易。 :)

答案 3 :(得分:5)

更改Java帖子名称

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

答案 4 :(得分:3)

您可以使用Thread.enumerate()Thread.getAllStackTraces()获取正在运行的主题列表。然后,您可以在每个上致电Thread.setName()

我无法告诉你它是否是一个好主意,但我可能倾向于“不”。您编写的代码越多,您需要维护的代码就越多。

答案 5 :(得分:1)

setName()可用于更改线程的名称,但您必须有一些方法来确定应调用线程的内容。
getAllStackTraces()将允许程序以堆栈跟踪为例,并使用类/方法/文件名称作为提示调用线程的内容。

答案 6 :(得分:1)

这引出了围绕线程命名约定的最佳实践问题。在这方面我没有看到任何社区指导。