/** * firstTask :第一次创建时会执行的任务 core :为True时使用corePoolSize进行判别,为False时使用maxpoolSize进行判别*/ private boolean addWorker(Runnable firstTask, boolean core) { retry: for (;;) { int c = ctl.get();//线程数 int rs = runStateOf(c);//线程池状态 // 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; if (compareAndIncrementWorkerCount(c)) //这里是线程个数加一,不是真的创建线程 break retry; //操作成功,退出循环,往下面走。 c = ctl.get(); // Re-read ctl if (runStateOf(c) != rs) continue retry; // else CAS failed due to workerCount change; retry inner loop } } boolean workerStarted = false; boolean workerAdded = false; Worker w = null; try { w = new Worker(firstTask); final Thread t = w.thread; if (t != null) { final ReentrantLock mainLock = this.mainLock; mainLock.lock(); try { // Recheck while holding lock. // Back out on ThreadFactory failure or if // shut down before lock acquired. int rs = runStateOf(ctl.get()); if (rs < SHUTDOWN || (rs == SHUTDOWN && firstTask == null)) { if (t.isAlive()) // precheck that t is startable throw new IllegalThreadStateException(); // workers 是一个 HashSet // private final HashSet<Worker> workers = new HashSet<Worker>(); workers.add(w); //这里worker添加到集合中,但还是没执行任务 int s = workers.size(); if (s > largestPoolSize) largestPoolSize = s; workerAdded = true; } } finally { mainLock.unlock(); } if (workerAdded) { t.start(); //这里才开始执行任务 workerStarted = true; } } } finally { if (! workerStarted) addWorkerFailed(w);//回滚操作 } return workerStarted; }