???????
????????????У??????????????????????????????????????????????????????????????????????????????????????Java ???Executor??????????????????????????????????й??????????????Runnable???????
???????棬????????????? Java ??????????ThreadPoolExecutor??
????????????????JDK1.7
????????????
????ThreadPoolExecutor?У????CAPACITY???3λ???????????????????
????RUNNING???????????????????????????е?????
????SHUTDOWN???????????????????????????е?????
????STOP??????????????????????????У????ж????н????е?????
????TIDYING???????????????????????????????? 0??????????????terminated()
????TERMINATED??terminated()??????


??????

????ThreadPoolExecutor????????????????λ
????private final AtomicInteger ctl = new AtomicInteger(ctlOf(RUNNING?? 0));
???????????
???????????

????corePoolSize??С???????????????????????allowCoreThreadTimeOut????????? 0??
????maximumPoolSize????????????????????CAPACITY
????keepAliveTime?????????????????λ??TimeUnit???
????workQueue?????????У??洢????е?????
????RejectExecutionHandler?????????????????????
????????????????CAPACITY?е????λ???????λ????????????????????(2^29)-1
???????????
????CachedThreadPool????????????????????????????????????????????????????????е???????????????????????????μ???????????????????κε??????
????FixedThreadPool??????????С??????????????????????????????????????????????????????С??????仯??
????SingleThreadPool?????????????????????????????????????????????????????????????е????????????У??????????????????????????μ?????????????
????ScheduledThreadPool??????????С????????????????????????????????????????Timer??
??????????? execute
?????????????
?????????????? < corePoolSize?????????μ??????????????addWorker(command?? true)
?????????????? >= corePoolSize????????????????г??
????????????????????RUNNING
???????????????????
???????????ж?????????????? 0?????? 0?????????????????
?????????????????????addWorker(command?? false)?????????????????
?????????????????????????????е??????Σ?
????poolSize < corePoolSize ??????????????????????????????????
????poolSize == corePoolSize?????????????????????У?????????????л????????У???????в??????δ????
????poolSize == corePoolSize?????????????????????????????????????????????poolSize < maxPoolSize
????poolSize == maxPoolSize?????????????????????????????
???????????
??????????????????????л??????RejectedExecutionHandler??????????????????????????????????
????AbortPolicy???????????????????RejectedException
????CallerRunsPolicy??????????????е????????????
????DiscardPolicy?? ?????????????????????????
????DiscardOldersPolicy???????????????е????????????
?????????е? Worker
????Worker?????AbstractQueuedSynchronizer??Runnable??????Worker????????????????й??????????????runWorker(Worker w)???????????????????У???Worker ???????workers???????棬??mainLock?????
????private final ReentrantLock mainLock = new ReentrantLock();
????private final HashSet<Worker> workers = new HashSet<Worker>();
??????????? runWorker
????????????????????????????????run?????????????
????final void runWorker(Worker w) {
????Thread wt = Thread.currentThread();
????Runnable task = w.firstTask;
????w.firstTask = null;
????while (task != null || (task = getTask()) != null) {
????w.lock();
????beforeExecute(wt?? task);
????task.run();
????afterExecute(task?? thrown);
????w.unlock();
????}
????processWorkerExit(w?? completedAbruptly);
????}
??????getTask()?л??????