面试时被问到futurtask的取消原理,没回答上来,回来阅读以下源码做个记录。
//有一个入参,需要说明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;