//有一个入参,需要说明task是否是可中断的
public boolean cancel(boolean mayInterruptIfRunning) {
if (state != NEW)
return false;
if (mayInterruptIfRunning) {
//尝试修改futuretask的运行状态
if (!UNSAFE.compareAndSwapInt(this, stateOffset, NEW, INTERRUPTING))
return false;
//获取当前线程发出中断信号
Thread t = runner;
if (t != null)
t.interrupt();
//修改task装态为已中断的
UNSAFE.putOrderedInt(this, stateOffset, INTERRUPTED); // final state
}
//如果是不可中断的只修改task的状态为cancelled
else if (!UNSAFE.compareAndSwapInt(this, stateOffset, NEW, CANCELLED))
return false;
//执行finishCompletion方法
/**
* Removes and signals all waiting threads, invokes done(),and nulls out callable.
*/
finishCompletion();
return true;
}
跑完了 饭回false
没跑完,输入true,修改为Interrupting,修改为Interrupted,返回true
没跑完,输入false,修改为Cancelled,返回true
compareAndSwapInt 相等并赋值成功返回true,否则返回false