什么是Java中的线程组?

Ade*_*lin 13 java multithreading

我想知道为什么互联网上关于线程组的文档很少?它们仍在使用,或者它们是一些陈旧的概念?有人可以解释一下:

  • 它们是什么.

  • 它们用于什么.

  • 如果他们是平静的使用,在哪里?

  • 给出一些真实的应用程序示例(可能是Web服务器).

Pet*_*rey 8

它们用作一组线程.在一个简单的应用程序中,您只需要一个,但在更复杂的应用程序服务器中,每个应用程序都有一个应用程序.

为什么互联网上关于线程组的文档很少?

我想有些人认为这是一个非常简单的想法.不确定它缺少什么.

它们仍在使用或它们是一些陈旧的概念吗?

我想大多数开发人员都不会想到线程组.但我认为它们在某些情况下很有用.我们有一个库,我们有一个自定义ThreadGroup来重置线程关联.

有人可以解释他们使用的是什么,如果仍然使用,并举例说明.

主要在应用程序服务器中,每个服务器都有自己的线程集合,可以集中管理.如果要监视或关闭应用程序,则需要知道应用程序启动的线程.

如果您在ThreadGroup中启动一个线程,它创建的每个线程也将在该线程组中.如果没有此功能,您将很难为应用程序分配线程.

来自@biziclop:你如何可靠地枚举一个组中的线程?

您可以获取activeThreads的大小并在ThreadGroup锁定时枚举this(无论好坏)

synchronized(threadGroup) {
    Thread[] threads = threadGroup.activeCount();
    threadGroup.enumerate(threads);
    // use threads before the lock is released or it could be wrong.
}
Run Code Online (Sandbox Code Playgroud)

  • @Adelin我会读取线程组的Javadoc,也可能是ThreadGroup和Thread的源代码.你有什么疑问? (2认同)
  • @Tom我同意.大多数开发人员应该使用1)parallelStream(),2)ExecutorService,3)可能是ForkJoinPool,4)普通线程,并且极不可能,最后一个)线程组. (2认同)
  • @FelixDombek JVM是一个进程,在Linux上,每个Thread的工作方式就像一个进程(并拥有自己的进程ID)一个线程组最好是列表和一个线程树之间的交叉,最糟糕的是找到一个好的东西很棘手用它.操作系统不知道存在这种情况. (2认同)