CompletionService.take (). IsDone () всегда верно? - PullRequest
0 голосов
/ 09 апреля 2010

Можно ли предположить, что

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

всегда будет возвращать true? Если так, почему take () возвращает Future, а не значение напрямую? Если нет, что означает «выполненное задание», используемое в документации?

Ответы [ 2 ]

3 голосов
/ 10 апреля 2010

Потому что вы можете использовать будущее для других вещей. Вам дают будущее, когда вы отправляете (). Таким образом, вы можете в первую очередь использовать возвращенный объект Future для отслеживания состояния или преждевременной отмены. Во-вторых, если вы измените futureFactory () (я думаю, это называется чем-то другим, но у меня установлена ​​Java 5, а не 6), вы можете добавить все виды дополнительных членов к будущему объекту.

Так что при выполнении take () вы правы в том, что в этом случае часть будущего (отслеживание / отмена состояния) не очень полезна. Но ОТО, почему бы не вернуть все будущее как есть, включая расширенную функциональность?

0 голосов
/ 09 апреля 2010

Это то, что, по-видимому, подразумевает javadoc: take() блокируется до тех пор, пока не сможет вернуть законченное Будущее, что, конечно, будет сделано после его возвращения.

...