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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了即使在线程关闭后,活动线程计数也不会减少相关的知识,希望对你有一定的参考价值。

在下面的代码中,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,否则它将继续分配资源。

以上是关于即使在线程关闭后,活动线程计数也不会减少的主要内容,如果未能解决你的问题,请参考以下文章

即使从主线程调用更新,UI 也不会更新

VC++ 线程同步 总结

Android中的线程或服务中的蓝牙通信?

活动到片段方法调用带有进度条的线程

ios - 即使应用程序关闭,我也可以运行后台线程吗

Android:如何在所有后台线程完成后启用按钮