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