【发布时间】:2010-06-03 15:20:04
【问题描述】:
为了争论,假设我正在为一个不可取消的任务实现Future。 Java 6 API doc 说:
在 [
cancel()] 返回后,对isDone()的后续调用将始终返回true。[
cancel()] 如果无法取消任务,则返回false,通常是因为它已经正常完成
它还说:
[
isDone()] 如果此任务完成,则返回true。
但是如果我的取消失败不是因为任务已经完成,而是因为它根本无法取消,该怎么办?有没有办法摆脱这种矛盾(除了让我无法取消的任务可以取消并完全回避它)?
【问题讨论】:
-
你错过了“完成”的资格:
Completion may be due to normal termination, an exception, or cancellation -- in all of these cases, this method will return true. -
引用
Future.cancel(boolean)也有关系:如果任务已经完成、已经被取消或不能被取消由于某些其他原因,此尝试将失败. 因此,无论出于何种原因未能取消似乎都是合法的。
标签: java concurrency future