Java中没有名称的线程对程序的影响

3

我在我的Java应用程序中有各种线程,语法如下:

new Thread(this).start();

当我使用Code Pro进行代码审核时,我收到了以下信息:

Thread declare without a name.

我希望知道这句话的含义,如果我改变声明会有什么影响。
new Thread(this,this.getName()).start();

他们之间有什么不同以及它们的影响。提前感谢。

2
你的lint建议你使用带有名称的新线程构造函数来创建线程,即使用new Thread(Runnable, String)构造函数。 - Gray
请注意,new Thread(this.getName()) 不会设置 Runnable,所以它可能只适用于扩展 Thread 的情况。 - Brendan Long
@BrendanLong 感谢您指出,我已修改我的问题。 - Ashish
2个回答

4

这只是Code Pro礼貌地提醒您,线程应该有一个标识名称,以便在需要调试时更容易。除此之外,它没有任何更多的“影响”,它只是一个好的编程实践。以下代码应该可以工作:

new Thread(this, "an identifying name").start();

请注意,只有在当前类中已经定义了要通过getName()返回的名称时,this.getName()才能起作用。

非常感谢您的清晰解释。 - Ashish

1

不同之处在于线程现在具有您指定的名称,而不是默认名称。显然,有人认为这足以使审核搁置。我肯定不这样认为。


实际上,如果您想监视线程的活动、争用等情况,这是必要的。Executors默认线程工厂创建的这些通用名称并没有透露太多信息,这就是为什么我们总是使用自己的线程工厂。不确定这是否应该成为审计问题 :) - Ralf H
@RalfH 如果代码无法正常工作,这种情况下它可能会有所帮助。但在我看来,这并不值得为之耽搁代码审查。我不相信让软件告诉我如何花费开发资金。如果代码无法正常工作,就需要有人进行调试,或者可能需要添加名称。我经常使用多线程(谁不是呢?),上一次命名线程是大约十年前的事了。 - user207421

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接