我是新来的并发性,我试图为do-while循环实现执行程序服务并发。但是,我总是碰上RejectedExecutionException
用于在Java中执行Do-While循环的ExecutorService
这里是我的示例代码:
do {
Future<Void> future = executor.submit(new Callable<Void>() {
@Override
public Void call() throws Exception {
// action
return null;
}
});
futures.add(future);
executor.shutdown();
for (Future<Void> future : futures) {
try {
future.get();
}
catch (InterruptedException e) {
throw new IOException(e)
}
}
}
while (true);
但这似乎不正确。我想我在错误的地方打电话关机。任何人都可以请帮我正确执行Executor Service in a do-while
循环。谢谢。
好点。我的2美分:除非您希望在处理任何期货之前等待所有期货的完成,否则您并不需要* CountDownLatch。重要的是不要在循环中调用Future.get;只要呼叫在循环后发生,可以立即返回;这与等待锁存器有类似的效果。 – dnault
@dnault你是对的,可能是另一个执行者服务会更好,可以用它来处理结果,一旦他们弹出。使用'Future.get()'来阻止将是不可靠的,因为列表中的第一个将来可能会使每个完成的结果等待它。 – 11thdimension