CompletionService.take().isDone() は常に true ですか?
-
25-09-2019 - |
質問
そう考えても安全ですか?
java.util.concurrent.CompletionService.take().isDone()
常に true を返しますか?もしそうなら、なぜ take() は値を直接返すのではなく、Future を返すのでしょうか?そうでない場合、ドキュメントで使用されている「完了したタスク」とは何を意味しますか?
解決
なぜなら、Future を他のことに使用できるからです。submit() を実行すると、未来が与えられます。したがって、まず返された Future オブジェクトを使用してステータスを監視したり、途中でキャンセルしたりすることができます。次に、futureFactory() (別の名前だと思いますが、Java 6 ではなく 5 がインストールされています) を変更すると、あらゆる種類の追加メンバーを future オブジェクトに追加できます。
したがって、 take() を実行するとき、この場合、将来の一部 (状態の追跡/キャンセル) はあまり役に立たないというのは正しいことです。でもOTOHさん、拡張機能も含めて未来全体をそのままに戻してみてはいかがでしょうか?
他のヒント
それがjavadocが示唆しているようです、 take()
完成した Future を返すことができるまでブロックします。もちろん、それが返されたときに実行されます。
所属していません StackOverflow