草庐IT

ExecutorCompletionService

全部标签

java - 在 Java 中,如何等待所有任务,但在出现第一个错误时停止?

我有一系列并发任务要运行。如果其中任何一个失败,我想打断它们并等待终止。但假设它们都没有失败,我想等待它们全部完成。ExecutorCompletionService似乎几乎是我在这里想要的,但似乎没有办法判断我的所有任务是否已完成,除非单独计算任务数量。(请注意,ExecutorCompletionService的Javadoc中的两个示例都跟踪任务的计数“n”,并使用它来确定服务是否完成。)我是不是忽略了什么,还是我真的必须自己编写这段代码? 最佳答案 是的,如果您使用的是ExecutorCompletionService,则确

java - 使用单例 ExecutorService 安全吗

在同一个线程池中使用单例ExecutorService和多个CompletionService实例是否安全?CompletionServicecollector=newExecutorCompletionService(threadPool);因此,将有多个线程创建实例,如上所示,“收集器”具有一个单例线程池。 最佳答案 会好的。ExecutorCompletionService的每个实例都维护自己的已完成任务队列,并仅使用底层Executor来处理每个任务。如果完成服务的数量很大,线程池有上限,任务之间可能会在性能上相互干扰,但不

java - 如何在 Java 中对返回 boolean 值的两个并行线程执行短路评估?

我正在寻找逻辑上等同于以下问题的指导:publicbooleanparallelOR(){ExecutorServiceexecutor=Executors.newFixedThreadPool(2);FuturetaskA=executor.submit(newSlowTaskA());FuturetaskB=executor.submit(newSlowTaskB());returntaskA.get()||taskB.get();//ThisisnotwhatIwant//Exceptionhandlingomittedforclarity}上面的构造给出了正确的结果但是总是等待

Java - 在 ExecutorCompletionService 中为 Callable 定义超时

我在使用ExecutorCompletionService时遇到了以下问题.我想在不同的线程中调用很多Callable。这些Callable不会彼此共享任何信息。我需要为每个Callable定义一个超时,例如。运行时间不要超过5秒。每个Callable都可以在我不知道何时开始的不同时间运行。超时后线程应该被停止/杀死,结果对我来说不再有趣了。不应影响其他“正常”运行的线程。所以让我们以一个简单的可调用对象和我当前的Java代码为例。importjava.util.Date;importjava.util.concurrent.Callable;publicclassJobimpleme

java Callable FutureTask Excecuter : How to listen to finished task

我对执行者服务还很陌生。喜欢自己做所有事情,但我认为是时候相信这些服务了。我想通过Executer传递一个Runnable。执行者将其包装在FutureTask中并将其交还给我。现在我调用polldone()方法。但我希望在done()方法返回true时得到通知。有一个get()方法会阻塞直到Runnable完成,但是之后我需要为每个作业添加一个额外的线程,只是为了查看它何时完成.我可以给我的执行者一些额外的Callable以获得任务完成的通知吗?到这里怎么走?我可以在run方法的末尾添加一些代码,但是done()可能仍然是false... 最佳答案