Future方法返回值的可靠性取消(false)

时间:2014-08-26 01:06:37

标签: java future

假设我使用ScheduledThreadPoolExecutor计划任务并获得Future。

我后来决定取消Future,并依赖 cancel 的返回值来触发一些清理操作。如果任务已经在运行,我不希望该任务被中断(所以我将 false 作为参数传递)。

取消的回报是否可靠?也就是说,是不可能的,如果取消返回“true”,那么任务实际上正在运行?

查看OpenJDK 8中的代码,看起来可能存在竞争条件,其中“取消”将任务的状态设置为CANCELED并返回true,但是跑步者已经可以通过“检查”开始执行。

据我所见,计算将被执行但结果未设置(这是好的)。但是,在我的情况下,“计算”有副作用所以我想知道我是否真的取消了它。

1 个答案:

答案 0 :(得分:0)

cancel(boolean)个州的javadoc

  

尝试取消执行此任务。 此尝试将失败如果   任务已经完成,已经取消,或者可以   因其他原因不能取消。

     

如果成功,则执行此任务   调用cancel时尚未启动,此任务永远不会运行。如果   任务已经开始,然后是mayInterruptIfRunning参数   确定执行此任务的线程是否应该是   因试图停止任务而中断。

强调我的。在所有未发生故障的情况下,呼叫将返回true。因此,该方法可能返回true并且您的任务正在运行。