java - 即使线程关闭后, Activity 线程计数也不会减少

标签 java multithreading executorservice

在下面的代码中,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 个线程将处于 Activity 处理任务状态。池中的线程将一直存在,直到显式关闭为止。

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

关于java - 即使线程关闭后, Activity 线程计数也不会减少,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55790729/

相关文章:

java - Runnable 或 Executor 服务

java - 使用迭代器时获取特定索引

java - 生成单调递增的整数

sql - Grails 服务中的数据源注入(inject)

java - ExecutorService(int n) 和 Thread.activeCount() 是如何工作的?

Java ExecutorService - 监控任务完成/状态栏

java - Java 属性中的西类牙语字符 óé 显示错误

java - Spring Reactive MVC 与 @EnableAsync

c# - 为什么 Thread.Sleep 在其他应用程序运行时等待的时间比请求的时间长?

python - 控制线程类python中的循环