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; } 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) { } } } }