2010-04-09 3 views
0

Безопасно предположить, чтоCompletionService.take(). IsDone() всегда верно?

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

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

ответ

3

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

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

+2

Кроме того, есть простой ответ на конструктивную симметрию. Хотя это правда, если вы выполняете() через службу завершения, будущее не так полезно, как необработанное представление задачи, оно используется для всех других аспектов подачи услуг типа «Исполнитель», некоторые из которых являются критическими в использовании для. – MJB

+0

Отлично, спасибо. – jfager

0

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

+1

Я согласен, что это то, что он подразумевает, но это оставляет вопрос о том, почему прямое значение возвращается прямо вместо значения. Я должен был угадать этот вопрос, прежде чем спросить его, хотя, поскольку мгновение, в которое я попал, пришло в голову, мне пришло в голову, что успех - это не единственное условие, при котором Future.isDone() возвращает true; он также сделает это, когда будущее будет отменено. Также имеет смысл сопоставить будущее, возвращенное из take(), в соответствующее Будущее, возвращенное ранее, возвращенное из submit(). – jfager

Смежные вопросы