私は並行性が新しく、do-whileループの実行者サービスの同時実行性を実装しようとしていました。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);
しかし、これは間違っているようだ。しかし、私はいつもここに私のサンプルコードですRejectedExecutionException
に実行します。私は間違った場所でシャットダウンを呼びかけていると思う。誰でもExecutor Service in a do-while
ループを正しく実装するのを助けてください。ありがとう。
良かった点を。私の2セント:すべての未来が完了するのを待ってからそれらのいずれかを処理するのを待っていない限り、CountDownLatchは本当に必要*ではありません。重要なことは、ループ内でFuture.getを呼び出さないことです。ループの後に呼び出しが行われる限り、すぐには返されないかもしれません。これはラッチを待つのと同様の効果があります。 – dnault
@dnaultあなたが正しいと思うかもしれませんが、別のエグゼキューターサービスは、すぐに結果を処理するのに使うことができます。 'Future.get()'を使ってブロックすると信頼できなくなります。リストの最初の未来があると、完了したすべての結果を待つことになります。 – 11thdimension