private boolean addWorker(Runnable firstTask, boolean core) {
retry:
for (;😉 {
// 记录了线程池中运行的线程数量和线程的状态,高3位为状态,低29位为线程数
int c = ctl.get();
// 线程运行状态
int rs = runStateOf©;
// Check if queue empty only if necessary.
if (rs >= SHUTDOWN &&
! (rs == SHUTDOWN &&
firstTask == null &&
! workQueue.isEmpty()))
return false;
for (;;) {
// 线程数
int wc = workerCountOf(c);
// 检查是否超出线程池的容量
if (wc >= CAPACITY ||
wc >= (core ? corePoolSize : maximumPoolSize))
return false;
// 将记录线程数的变量+1
if (compareAndIncrementWorkerCount(c))
break retry;
c = ctl.get(); // Re-read ctl
// 如果没有成功创建,那么将会重试
if (runStateOf(c) != rs)
continue retry;
// else CAS failed