即使线程关闭后,活动线程数也不会减少

时间:2019-04-22 07:27:56

标签: java multithreading executorservice

在下面的代码中,即使执行程序中的线程在5秒后终止,Thread.activeCount()仍始终返回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秒后返回1。为什么总是返回2?

2 个答案:

答案 0 :(得分:4)

请参阅newFixedThreadPool的文档。 https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/Executors.html#newFixedThreadPool(int)

在任何时候,最多nThreads个线程都是活动的处理任务。池中的线程将一直存在,直到被明确关闭为止。

可调用对象提交给此执行器后,它将被池中的线程之一处理并处理。 完成此执行后,线程将在池中空闲,等待下一个可调用。

答案 1 :(得分:0)

您应该使用service.shutdown()关闭executorService,否则它将继续分配资源。