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