【发布时间】:2018-02-07 21:28:58
【问题描述】:
我有一个要求,我必须为 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() 吗?中断/不完整线程的结果如何?我对这部分感到困惑。
如果线程失败,我想将它们的状态字段标记为失败,如果线程成功,我想将它们标记为成功。
【问题讨论】:
-
在您的情况下,您希望如何处理失败或未及时完成的任务?忽视?整件事都失败了?
-
@KennedyOliveira :如果线程失败,我想将它们的状态字段标记为失败,如果线程成功,我想将它们标记为成功。
-
我认为这可以用docs.oracle.com/javase/8/docs/api/java/util/concurrent/… 可以很好地解决 - 可以假设“失败”仅意味着任务花费了太长时间(而不是内部线程被中断或抛出异常)?
标签: java multithreading concurrency future executorservice