为什么使用java.lang.ThreadGroup不安全?

时间:2013-09-19 14:35:46

标签: java thread-safety pmd white-box threadgroup

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

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

1 个答案:

答案 0 :(得分:2)

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

之后,ThreadGroup没有提供真正的功能。它只是过时了,只是出于历史原因而维护。唯一没有效果的功能是uncaughtException(Thread t, Throwable e)。但是,由于Java 5存在Thread.setUncaughtExceptionHandler( UncaughtExceptionHandler)所以现在甚至可以在没有线程组的情况下工作。

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

Joshua Bloch在“Effective Java”中写道:

  

线程组最好被视为不成功的实验,你应该忽略它们的存在。