1

我正在寻找最佳实践,并将 PMD 应用于我的 Java EE 项目,但有一条规则说我必须避免使用 java.lang.ThreadGroup,而我现在正在使用它。

规则说这是不安全的,我想知道:为什么?谢谢

4

1 回答 1

2

出于安全原因使用 ThreadGroup 的概念已被放弃,因为 Thread(Group) 与其正在执行的实际代码之间没有可控的关系。即使是最高特权的线程也可能运行不安全的代码,从而将该代码提升到不希望的级别。因此,正在执行的代码本身(及其来源)用于决定它拥有哪些权限。因此,执行线程及其组对安全性没有任何作用。

所以在那之后,ThreadGroup没有提供真正的功能。它只是过时了,只是出于历史原因而维护。唯一无法使用的功能是uncaughtException(Thread t, Throwable e). 但是自从 Java 5 以来Thread.setUncaughtExceptionHandler( UncaughtExceptionHandler),即使没有线程组也可以工作。

是的,很多ThreadGroups 方法都不是线程安全的,也没有尝试修复它们,只是因为它们已经过时了。

Joshua Bloch 在“Effective Java”中写道:

最好将线程组视为不成功的实验,您应该直接忽略它们的存在。

于 2013-09-19T17:14:20.900 回答