ThreadGroup在创建单独的线程方面有什么好处?

sac*_*sha 21 java multithreading

许多方法,如stop(),resume(),suspend()等已被弃用.

那么使用ThreadGroup?创建线程是否有用?

ska*_*man 23

ThreadGroup在具有数千个线程的大型应用程序服务器中,使用是一种有用的诊断技术 如果您的线程在逻辑上组合在一起,那么当您获得堆栈跟踪时,您可以看到违规线程所属的组(例如"Tomcat线程","MDB线程","线程池X"等),这可以是在追踪和解决问题方面有很大帮助.

  • 公平点,但附加结构可能很有用,例如通过线程组聚合CPU使用情况. (3认同)
  • 我在过去考虑过这一点,并且我认为它不会给你任何东西而只是恰当地命名线程.但是,如果您无法修改线程名称,或者您有一个工具来监视由组聚合的线程活动,那么这是另一回事. (2认同)

Gre*_*tes 13

不要ThreadGroup用于新代码.改用这些Executor东西java.util.concurrent.

  • 这似乎没有回答这个问题,即"我为什么要使用它?" 不是"我应该使用它吗?" (5认同)
  • 有效的Java第二版.项目73.遗憾的是,我认为全球社会因目前的问题对这个问题的信息投票失败了. (3认同)

jbx*_*jbx 10

提供的答案(6年前左右)有点补充.但是,虽然Concurrency API提供了许多构造,但ThreadGroup仍然可能有用.它提供以下功能:

  1. 线程的逻辑组织(用于诊断目的).
  2. 您可以interrupt()使用组中的所有线程.(中断完全没问题,不像suspend(),resume()stop()).
  3. 您可以设置组中线程的最大优先级.(不确定它有多广泛,但你有它).
  4. 将其设置ThreadGroup为守护程序.(因此添加到它的所有新线程都将是守护线程).
  5. 它允许你覆盖它,uncaughtExceptionHandler这样如果组中的一个线程抛出异常,你就有一个回调来处理它.
  6. 它为您提供了一些额外的工具,例如获取线程列表,您拥有多少活动的等等.当有一组工作线程或某种线程池时很有用.