private final class Worker
        extends AbstractQueuedSynchronizer  //线程中断
        implements Runnable  //存储需要执行的任务
{
    private static final long serialVersionUID = 6138294804551838833L;
//    工作线程的Thread对象,初始化时候构建出来的
    final Thread thread;
//  需要执行的任务
    Runnable firstTask;
    volatile long completedTasks;
    Worker(Runnable firstTask) {
//        刚刚初始化的工作线程不允许被中断
        setState(-1); // inhibit interrupts until runWorker
//        第一次new的时候,会将任务赋值给firstTask
        this.firstTask = firstTask;
//        给Worker构建Thread对象
        this.thread = getThreadFactory().newThread(this);
    }
//   调用t.start()  执行当前的run方法
    public void run() {
        runWorker(this);
    }
//  中断线程不是立即让线程停止,只是让thread的中断标识设置为true
    protected boolean isHeldExclusively() {
        return getState() != 0;
    }
    protected boolean tryAcquire(int unused) {
        if (compareAndSetState(0, 1)) {
            setExclusiveOwnerThread(Thread.currentThread());
            return true;
        }
        return false;
    }
    //将state置为0,在runWorker中,为了表示当前线程允许被中断
    protected boolean tryRelease(int unused) {
        setExclusiveOwnerThread(null);
        setState(0);
        return true;
    }
    public void lock()        { acquire(1); }
    public boolean tryLock()  { return tryAcquire(1); }
    public void unlock()      { release(1); }
    public boolean isLocked() { return isHeldExclusively(); }
    void interruptIfStarted() {
        Thread t;
        if (getState() >= 0 && (t = thread) != null && !t.isInterrupted()) {
            try {
                t.interrupt();
            } catch (SecurityException ignore) {
            }
        }
    }
}