我正在使用一个包含10个固定线程的ExecutorService。
ExecutorService service = Executors.newFixedThreadPool(10);
当我尝试使用以下命令查找线程数时:
System.out.println(Thread.activeCount());
输出结果在11至15之间变化。
我知道其中一个线程是主线程。
但其他线程是什么?
我正在使用一个包含10个固定线程的ExecutorService。
ExecutorService service = Executors.newFixedThreadPool(10);
当我尝试使用以下命令查找线程数时:
System.out.println(Thread.activeCount());
输出结果在11至15之间变化。
我知道其中一个线程是主线程。
但其他线程是什么?
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。