從中可以看出task1和task2依次最先執行,這時候currentPoolSize=2達到了corePoolSize,task3、task4、task5被送入緩沖隊列,達到了workQueue最大值3,task6、task7、task8開啟新的線程開始執行,此時currentPoolSize=5達到了maximumPoolSize,task9、task10根據AbortPolicy政策抛出異常,不再執行task9和task10。10秒鐘後task1、task2….依次執行完畢釋放線程,開始執行隊列裡的task3、task4、task5,最後task3、4、5執行完畢,所有任務完成。
JDK根據ThreadPoolExecutor配置好的線程池
// 固定工作線程數量的線程池
ExecutorService executorService1 = Executors.newFixedThreadPool(3);
// 一個可緩存的線程池
ExecutorService executorService2 = Executors.newCachedThreadPool();
// 單線程化的Executor
ExecutorService executorService3 = Executors.newSingleThreadExecutor();
// 支援定時的以及周期性的任務執行
ExecutorService executorService4 = Executors.newScheduledThreadPool(3);