0

それを仮定するのは安全ですか

java.util.concurrent.CompletionService.take().isDone() 

常にtrueを返しますか?もしそうなら、なぜtake()は値を直接返すのではなく、Futureを返すのですか?そうでない場合、ドキュメントで使用されている「完了したタスク」とはどういう意味ですか?

4

2 に答える 2

3

未来を他のことに使うことができるからです。あなたがsubmit()するとき、あなたは未来を与えられます。そのため、まず、返されたFutureオブジェクトを使用して、ステータスを監視したり、時期尚早にキャンセルしたりできます。次に、futureFactory()を変更すると(別の名前で呼ばれていると思いますが、Java 5ではなく6がインストールされています)、futureオブジェクトにあらゆる種類の追加メンバーを追加できます。

したがって、take()を実行する場合、この場合、将来の一部(状態の追跡/キャンセル)はあまり役に立ちません。しかし、OTOH、拡張機能を含め、将来全体をそのまま返してみませんか?

于 2010-04-09T21:47:20.397 に答える
0

これは、javadocが意味しているように思われtake()、完成したFutureを返すことができるまでブロックします。もちろん、これは返されたときに実行されます。

于 2010-04-09T19:32:17.713 に答える