了解线程组在Java中有用吗?

了解线程组在Java中有用吗?,java,multithreading,debugging,thread-safety,Java,Multithreading,Debugging,Thread Safety,Java编程语言使用ThreadGroup来管理线程之间的访问权限: 线程组表示一组线程。此外,线程组还可以包括其他线程组。线程组形成一个树,其中除初始线程组外的每个线程组都有一个父线程组 允许线程访问有关其自身线程组的信息,但不允许访问有关其线程组的父线程组或任何其他线程组的信息 我想我能理解,但这有用吗?我想知道,从调试的角度来看,显示当前的ThreadGroup结构及其元素(即线程和其他ThreadGroup)是否包含任何信息。ThreadGroup通常被认为是失败的实验。如果您的代码需要

Java编程语言使用
ThreadGroup
来管理线程之间的访问权限:

线程组表示一组线程。此外,线程组还可以包括其他线程组。线程组形成一个树,其中除初始线程组外的每个线程组都有一个父线程组

允许线程访问有关其自身线程组的信息,但不允许访问有关其线程组的父线程组或任何其他线程组的信息


我想我能理解,但这有用吗?我想知道,从调试的角度来看,显示当前的ThreadGroup结构及其元素(即线程和其他ThreadGroup)是否包含任何信息。

ThreadGroup
通常被认为是失败的实验。如果您的代码需要与Java插件或Java WebStart环境交互,那么了解它是很有用的。否则,我就不会真的麻烦了。

首先,这几乎是毫无意义的。很少有应用程序使用线程组,因此应用程序线程几乎总是在同一个线程组中结束

第二,我认为您引用的限制是指沙盒应用程序。根据线程组javadoc的其他部分,枚举线程组中线程的能力由安全管理器控制

第三,如果一个应用程序是沙盒的,最好将其对沙盒之外的内容的了解限制在沙盒之外。如果没有,那么就没有什么好隐瞒的了

最后,如果您使用的是调试器,它将访问根线程组,因此不会受到此限制的阻碍。。。如果它真的存在。类似地,“主”线程将位于根线程组中



正如@Tom Hawtin所说,线程组被认为是一个失败的实验,特别是因为它们被设计为支持的方法(thread.stop、thread.destroy等)由于不安全而被弃用。

ThreadGroups可以使线程管理变得更简单,在你必须处理大量线程的情况下


顺便说一句,在JavaWorld上解释线程组的文章:

我发现它很方便,尽管它有很多bug。它可以用于提供管理内容b/c创建的线程将被添加到父线程的线程组中(并且可以有效地枚举)。它可以用来防止新线程的产生(但它没有文档记录,也没有意图)

不幸的是,ThreadGroup有很多bug,包括destroy()方法

简而言之,如果您不打算编写中间件,就不用麻烦了。如果需要枚举应用程序中的所有线程,请使用
Thread.getAllStackTraces().keySet()
,该方法有一个安全漏洞,但我不讨论这一部分

编辑:我错过了调试方面:
如果调试工具允许通过ThreadGroup进行树视图和分组(例如eclipse这样做),那么ThreadGroup实际上对调试非常有用。如果正确使用,当前调试的模块/mbean/etc中的所有线程都应该在同一组中。它允许更容易地跟踪线程泄漏(与查看其他数百个线程相比)

销毁方法有哪些bug?