我正在寻找最佳实践并将PMD应用于我的Java EE项目,但有一条规则说我必须避免使用java.lang.ThreadGroup,而我现在正在使用它。
规则说这不安全,我想知道:为什么? 感谢
答案 0 :(得分:2)
出于安全原因使用ThreadGroup的概念已被放弃,因为Thread(Group)与它正在执行的实际代码之间没有可控制的关系。即使是最有特权的线程也可能运行不安全的代码,从而将代码提升到不希望的级别。因此,正在执行的代码(及其来源)用于决定它具有哪个权限。因此,执行线程及其组不会以任何方式对安全起任何作用。
之后,ThreadGroup
没有提供真正的功能。它只是过时了,只是出于历史原因而维护。唯一没有效果的功能是uncaughtException(Thread t, Throwable e)
。但是,由于Java 5存在Thread.setUncaughtExceptionHandler( UncaughtExceptionHandler)
所以现在甚至可以在没有线程组的情况下工作。
是的,很多ThreadGroup
方法都不是线程安全的,并且没有尝试修复它们,只是因为它们已经过时了。
Joshua Bloch在“Effective Java”中写道:
线程组最好被视为不成功的实验,你应该忽略它们的存在。