许多方法,例如stop()
,resume()
,suspend()
等已被弃用。
因此,使用ThreadGroup
创建线程是否有用?
许多方法,例如stop()
,resume()
,suspend()
等已被弃用。
因此,使用ThreadGroup
创建线程是否有用?
在拥有数千个线程的大型应用服务器中,使用 ThreadGroup
可以是一种有用的诊断技巧。如果你的线程被逻辑分组在一起,那么当你获取堆栈跟踪时,你可以看到有问题的线程所属的组别(例如"Tomcat 线程"、 "MDB 线程"、 "线程池 X" 等),这可以帮助你更容易地追踪和解决问题。
不要在新代码中使用ThreadGroup
。请改用java.util.concurrent
中的Executor
。
ThreadGroup
和Executor
并不是互斥的。您可以使用Executors
和ThreadFactory
一起创建带有ThreadGroup
的线程。 - cambunctiousThreadGroup
仍然有用。它提供以下功能:
interrupt()
组中的所有线程。(中断是完全可以的,不像suspend()
、resume()
和stop()
)。ThreadGroup
设置为守护进程。(因此,添加到其中的所有新线程都将是守护线程)。uncaughtExceptionHandler
,以便如果组中的一个线程引发异常,则拥有回调来处理它。Thread
存储到集合中。我不知道如何判断线程何时被创建。 - Tom Hawtin - tacklinenew Thread(...)
这一段代码。:-) 由于线程只能在构造时显式地分配到一个组中,因此可以合理地假设 OP 的代码是显式地创建它们的。如果他没有自己调用构造函数,那么他无法更改线程组。 - Andrzej Doyle非常好的答案,适用于@skaffman。我想再增加一个优点:
线程组有助于一次性操作在其中定义的所有线程。