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

时间:2018-05-09 10:36:29

标签: java multithreading executorservice

我正在使用具有10个固定线程的ExecutorService。

  ExecutorService service = Executors.newFixedThreadPool(10);

当我尝试使用

找出线程数时
  System.out.println(Thread.activeCount());

输出从11到15不等。

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

但是其他线程是什么?

1 个答案:

答案 0 :(得分:3)

Java中有一些线程在后台运行,例如用于调用finalize()方法的终结器。您可以通过查看最父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。