//有一个入参,需要说明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