即使在线程关闭后,活动线程数也不会减少
Active thread count doesn't decrements even after the thread closes
在下面的代码中,即使执行程序中的线程在 5 秒后终止,Thread.activeCount() returns 2 始终如此。
public class MainLoop {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(12);
executor.submit(new Callable<Void>() {
public Void call() throws Exception {
Thread.sleep(5000);
return null;
}
});
while (true) {
System.out.println(Thread.activeCount());
Thread.sleep(1000);
}
}
}
我预计 Thread.activeCount() 会在 5 秒后变为 return 1。为什么总是 returning 2 ?
查看 newFixedThreadPool 的文档。
https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)
在任何时候,最多有 nThreads 个线程将处于活动状态处理任务。池中的线程将一直存在,直到它被显式关闭。
将可调用对象提交给此执行程序后,它将被池中的一个线程启动并处理。
完成此执行后,线程将在池中空闲等待下一个可调用对象。
在下面的代码中,即使执行程序中的线程在 5 秒后终止,Thread.activeCount() returns 2 始终如此。
public class MainLoop {
public static void main(String[] args) throws Exception {
ExecutorService executor = Executors.newFixedThreadPool(12);
executor.submit(new Callable<Void>() {
public Void call() throws Exception {
Thread.sleep(5000);
return null;
}
});
while (true) {
System.out.println(Thread.activeCount());
Thread.sleep(1000);
}
}
}
我预计 Thread.activeCount() 会在 5 秒后变为 return 1。为什么总是 returning 2 ?
查看 newFixedThreadPool 的文档。 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)
在任何时候,最多有 nThreads 个线程将处于活动状态处理任务。池中的线程将一直存在,直到它被显式关闭。
将可调用对象提交给此执行程序后,它将被池中的一个线程启动并处理。 完成此执行后,线程将在池中空闲等待下一个可调用对象。