java - 执行程序终止和关闭之间的区别

标签 java multithreading parallel-processing

我想等待我所有的线程都被执行,然后才继续。

ExecutorService es = Executors.newFixedThreadPool(3);
List<Callable<Void>> calls = new LinkedList<>();

Arrays.stream(new int[]{1,2,3})
        .forEach( i -> calls.add(() -> {
            someFunc(i);
            return null;
        }));

try {
    es.invokeAll(calls);
} catch (InterruptedException e) {
    e.printStackTrace();
}

es.shutdown();

System.out.println(es.isTerminated()); //prints false
System.out.println(es.isShutdown()); //prints true

为什么我在这两种情况下都没有得到 true

我的所有线程都已成功终止。

最佳答案

查看 isTerminated 的文档突出了区别:

Returns true if all tasks have completed following shut down. Note that isTerminated() is never true unless either shutdown() or shutdownNow() was called first.

@return true if all tasks have completed following shut down

因此在您的情况下,这意味着执行程序已关闭但您的任务未完成。

关于java - 执行程序终止和关闭之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47078369/

相关文章:

java - 可以将 Thread 对象存储在 session 或应用程序属性中吗?

java - 在标记周围 50 米半径内时,触发方法

java.lang.ClassNotFoundException : com. ibm.jms.xxxxxxxxxx 问题

multithreading - 线程成本

.net - 可以将同一驱动器上的文件操作批处理到同一线程的线程调度程序?

python - 如何并行迭代 SimPy 模拟?

c - C 中的指针数组

java - 在android中调整字节数组的大小

java - 如何在 Javafx 中使用 Arraylist 填充表列

C#跨线程通信