Java中活动线程计数中的后台线程是什么?

3

我正在使用一个包含10个固定线程的ExecutorService。

  ExecutorService service = Executors.newFixedThreadPool(10);

当我尝试使用以下命令查找线程数时:

  System.out.println(Thread.activeCount());

输出结果在11至15之间变化。

我知道其中一个线程是主线程。

但其他线程是什么?


垃圾回收器可能会使用线程。根据您使用的库/框架,它们也可能使用线程,但您没有对此进行任何说明。 - Giacomo Alzetta
1个回答

3

Java中有一些在后台运行的线程,比如用于调用finalize()方法的Finalizer。您可以通过查看最高级别的ThreadGroup来打印它们:

ThreadGroup group = Thread.currentThread().getThreadGroup();
while (group.getParent() != null) {
  group = group.getParent();
}
Thread[] threads = new Thread[group.activeCount()];
group.enumerate(threads);
Arrays.stream(threads).forEach(System.out::println);

它将输出类似以下内容:
Thread[Reference Handler,10,system]
Thread[Finalizer,8,system]
Thread[Signal Dispatcher,9,system]
Thread[Attach Listener,5,system]
Thread[main,5,main]
Thread[Monitor Ctrl-Break,5,main]

在你的例子中,Thread.activeCount()Thread.currentThread().getThreadGroup().activeCount() 的简写,因此你正在查看最顶层、当前的 ThreadGroup。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接