Java编程语言使用ThreadGroup来管理线程之间的访问权限:
线程组表示一组线程。此外,线程组还可以包括其他线程组。线程组形成一个树,其中除初始线程组之外的每个线程组都有一个父线程组。
允许线程访问有关其自己线程组的信息,但不允许访问有关其线程组的父线程组或任何其他线程组的信息。
我想我明白了,但这有什么用吗?我想知道显示当前ThreadGroup结构及其元素(例如线程和其他ThreadGroup )是否包含从调试角度来看的任何信息。
发布于 2011-06-22 13:08:19
我发现它很方便,尽管它被窃听了。它对于提供管理内容b/c非常有用,所创建的线程将被添加到父线程的ThreadGroup中(并且可以有效地枚举)。它可以用来防止新的线程产生(但它没有记录或意图)。
不幸的是,ThreadGroup有相当多的bug,包括。破坏()方法
简而言之,如果您不准备编写中间件,就不要费心了。如果需要枚举应用程序中使用Thread.getAllStackTraces().keySet()的所有线程,则该方法有一个安全漏洞,但我不讨论这个部分。
编辑:我忽略了调试方面:如果调试工具允许按ThreadGroups进行树视图和分组(例如eclipse这样做),那么对于调试目的来说,ThreadGroup实际上是很有用的。如果使用得当,当前调试的模块/mbean/etc中的所有线程都应该位于同一组中。它允许更容易地跟踪线程泄漏(与查看其他100个线程相比)。
发布于 2011-06-22 12:52:51
ThreadGroup通常被认为是一个失败的实验。如果您的代码需要与Java PlugIn或WebStart环境交互,那么了解它是有用的。不然的话,我就不会费心了。
发布于 2011-06-22 12:53:53
首先,这几乎是没有意义的。很少有应用程序使用线程组,因此应用程序线程几乎总是位于同一个线程组中。
第二,我认为您引用的限制是指沙箱应用程序。根据ThreadGroup javadoc的其他部分,枚举线程组中的线程的能力由安全管理器控制。
第三,如果一个应用程序是沙箱,那么最好是限制它对沙箱之外的东西的了解。如果没有,那就没什么好隐瞒的了。
最后,如果您使用调试器,它将可以访问根线程组,因此不会受到此限制的阻碍.如果它真的存在。类似地,“主”线程将位于根线程组中。
正如@ that所说,线程组被认为是一个失败的实验,特别是因为它们所支持的方法(Thread.stop、Thread.destroy等)因其不安全而被废弃。
https://stackoverflow.com/questions/6440049
复制相似问题