java - 如何使用ExecutorService获取所有提交任务的结果?

标签 java multithreading concurrency future executorservice

我有一个要求,我必须为 5 个任务启动 5 个线程,并且完成任务有一个特定的超时时间。超时后我想要所有任务的结果。我该如何使用 ExecutorService 来实现此目的? 根据我读到的有关 ExecutorService 的内容,我得出的结论是我需要以下内容:

List<Future> futures = new ArrayList<Future>();
futures.addAll(executor.submit(new someCallable()));
try {
    if (!executorService.awaitTermination(30*1000, TimeUnit.MILLISECONDS)) {
        executorService.shutdownNow();
    } 
} catch (InterruptedException e) {
    executorService.shutdownNow();
}

我应该执行 future.get() 吗?中断/不完整线程的结果怎么样?我对这部分感到困惑。 如果线程失败,我想将其状态字段标记为失败,如果线程成功,我想将它们标记为成功。

最佳答案

您可以仅使用 ExecutorService 中的 invokeAll 并指定超时 - API

关于java - 如何使用ExecutorService获取所有提交任务的结果?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48673555/

相关文章:

java - 在并发环境中定义字段

java - 在java中为文本文件创建二维数组?

Java Grande SOR 多线程基准测试

java - Thread.start() 和 Thread.run() 有什么区别?

c# - 当您在 C# 任务等待程序上调用 `OnCompleted()` 时,您如何等待 OnCompleted 调用中给出的新作业?

java并发-带有监视器线程的单例设计

java - 如何获取 key 以及如何添加更多值?

java - 以编程方式检测 BouncycaSTLe 版本

java - 实现接口(interface)的类的类型是什么

java - Java:两个线程同时对给定范围内的数字求和:当仅连接一个线程时,第二个线程的总和太大