【发布时间】:2010-07-17 12:59:59
【问题描述】:
在什么情况下希望将false 的mayInterruptIfRunning 参数传递给@987654321@?
如果我理解正确,如果你通过false 并且任务被取消但线程没有被中断,结果(或ExecutionException)将永远无法访问,因为任务仍然标记为已取消(即isCancelled() 返回true 和get() 抛出CancellationException。)
其他可能的情况有:
-
Runnable或Callable实现不检查中断,即使您确实中断它也会运行完成(这里中断没有区别) - 在您调用
cancel()之前任务已经完成(同样中断没有区别) - 任务需要在退出之前执行一些清理(编写良好的实现将为此使用
try ... finally。) - 任务不能立即终止,必须继续执行受中断影响的操作,例如阻塞 I/O(在这种情况下,您可能根本不应该调用
cancel)
那么你什么时候/为什么要取消一个任务而不打断它呢?
【问题讨论】:
标签: java concurrency future