2010-06-03 2 views
4

Ради аргумента, допустим, я реализую Future для задачи, которая не отменяется. Java 6 API doc говорит:Несоответствие в java.util.concurrent.Future?

После [cancel()] возвраты, последующие вызовы isDone() всегда будут возвращать true.

[cancel()] возвращает false, если задача не может быть отменено, как правило, потому, что она уже завершена нормально

Он также говорит:

[isDone()] возвращает true, если эта задача была выполнена.

Но что делать, если моя отмена не выполняется, потому что задача уже завершена, а потому, что ее просто нельзя отменить? Есть ли выход из этого противоречия (за исключением того, что моя несостоятельная задача отменяется и обходит ее вообще)?

+2

Вы пропустили квалификацию «завершена»: «Завершение может быть вызвано обычным завершением, исключением или отменой - во всех этих случаях этот метод вернет true. ' –

+1

Это также относится к цитированию' Future.cancel (boolean) ': * Эта попытка потерпит неудачу, если задача уже завершена, уже отменена или не может быть отменена ** по какой-то другой причине **. * Таким образом, это кажется законным, чтобы не отменить по какой-либо причине вы хотите. –

ответ

1

Это похоже, как документ должен сказать

После cancel() возвращает истинные последующие вызовы isDone() ...

Javadocs часто утончаются неправильно и противоречат друг другу, и Солнце часто даже не беспокоило их исправлять даже после 10 лет. Тщательное тестирование должно всегда дополнять документы.

+0

Я бы не стал полагаться на вывод «тщательного тестирования» в качестве расширения для документации. Если спецификация не является конкретной, другие реализации (включая дополнительные версии той же виртуальной машины) могут вести себя по-разному. Зафиксируйте спецификацию, если вы хотите быть в безопасности. – Romain

+0

@Romain: Я не вижу, как вы можете сказать, что придерживаться спецификации безопасно, когда эталонная (и фактическая стандартная) реализация не соответствует спецификации. Ваша программа будет ошибочной в 99% случае, но, возможно, подходит для среды, которую никто никогда не будет использовать. –

+0

Я думаю, что 99% раз - это широкая драматизация. Спецификация обычно не ошибается, но иногда очень плохо сформулирована и неточна. – Romain

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