final ReentrantLock mainLock = this.mainLock;
mainLock.lock();
try {
for (Worker w : workers)
w.interruptIfStarted();
} finally {
mainLock.unlock();
}
}
这个方法是打断worker的方法
获取mainLock 然后锁定
遍历每个worker 调用interrupIfStarted方法进行阻塞 最后解锁
private void interruptIdleWorkers(boolean onlyOne) {
final ReentrantLock mainLock = this.mainLock;
mainLock.lock();
try {
for (Worker w : workers) {
Thread t = w.thread;
if (!t.isInterrupted() && w.tryLock()) {
try {
t.interrupt();
} catch (SecurityException ignore) {
} finally {
w.unlock();
}
}
if (onlyOne)
break;
}
} finally {
mainLock.unlock();
}
}
这个是打断空闲worker的方法 参数为true代表只打断一个
先获取mainLock 然后锁定
遍历每个worker
获取每个worker的线程
判断如果线程没有被打断 且worker由这个线程独占
就调用线程的interrupt方法打断线程
解锁worker与该线程
如果参数为true 那么打断了一个空闲线程之后就退出for循环
最后解锁mainLock
private void interruptIdleWorkers() {
interruptIdleWorkers(false);
}
这个方法就是对上面的调用 传了false
private static final boolean ONLY_ONE = true;
ONLY_ONE属性 默认为true
final void reject(Runnable command) {
handler.rejectedExecution(command, this);
}
这个是拒绝的方法 调用handler属性的方法
void onShutdown() {
}
关闭方法 空实现
final boolean isRunningOrShutdown(boolean shutdownOK) {
int rs = runStateOf(ctl.get());
return rs == RUNNING || (rs == SHUTDOWN && shutdownOK);
}
判断是RUNNING或SHUTDOWN状态的方法
获取状态 然后判断 没什么可说的