在下面的代码中,Thread.activeCount()总是返回2,即使执行程序中的线程在5秒后终止。
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秒后返回1。为什么它总是返回2?
请参阅newFixedThreadPool的文档。 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)
在任何时候,最多nThreads线程将是活动的处理任务。池中的线程将一直存在,直到它被明确关闭。
在将一个callable提交给这个执行程序之后,它将被池中的一个线程刺破并处理。完成此执行后,线程将在池中空闲,等待下一个可调用。
您应该使用service.shutdown()
关闭您的executorService,否则它将继续分配资源。