public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) 複製代碼
- corePoolSize:核心線程數,默認狀況下核心線程會一直存活,即便處於閒置狀態也不會受keepAliveTime限制。除非將allowCoreThreadTimeOut設置爲true;
- maximumPoolSize:線程池所能容納的最大線程數。超過這個數的線程將被阻塞。當任務隊列爲沒有設置大小的LinkedBlockingDeque時,這個值無效;
- keepAliveTime:非核心線程的閒置超時時間,超過這個時間就會被回收;
- unit:指定keepAliveTime的單位,如TimeUnit.SECONDS。當將allowCoreThreadTimeOut設置爲true時對corePoolSize生效;
- workQueue:線程池中的任務隊列,經常使用的有三種隊列,SynchronousQueue,LinkedBlockingDeque,ArrayBlockingQueue;
- threadFactory:線程工廠,提供建立新線程的功能;
- RejectedExecutionHandler handler:當線程池中的資源已經所有使用,添加新線程被拒絕時,會調用RejectedExecutionHandler的rejectedExecution方法。
- 若是運行的 線程少於 corePoolSize,則 Executor 始終首選添加新的線程,而不進行排隊;
- 若是運行的 線程等於或多於 corePoolSize,則 Executor 始終首選將請求加入隊列,而不添加新的線程;
- 若是 沒法將請求加入隊列,則 建立新的線程;
- 若是 線程數超出 maximumPoolSize,在這種狀況下,任務將被拒絕(執行拒絕策略);
- 在 默認的 ThreadPoolExecutor.AbortPolicy 中,處理程序遭到拒絕將拋出運行時 RejectedExecutionException;
- 在 ThreadPoolExecutor.CallerRunsPolicy 中,線程調用運行該任務的 execute 自己。此策略提供簡單的反饋控制機制,可以減緩新任務的提交速度;
- 在 ThreadPoolExecutor.DiscardPolicy 中,不能執行的任務將被刪除;
- 在 ThreadPoolExecutor.DiscardOldestPolicy 中,若是執行程序還沒有關閉,則 位於工做隊列頭部的任務將被刪除,而後重試執行程序(若是再次失敗,則重複此過程);
- DefaultThreadFactory:設置線程的優先級爲NORM(新建線程的優先級都是與其父線程保持一致);
- PrivilegedThreadFactory:繼承自DefaultThreadFactory,主要添加了訪問權限校驗;
FactoryPattern:工廠模式,意義在於屏蔽使用者與實現者具體類緊耦合;java
// 任務執行前調用
protected void beforeExecute(Thread t, Runnable r) { }
// 任務結束後調用
protected void afterExecute(Runnable r, Throwable t) { }
// Executor終止前調用
protected void terminated() { }
複製代碼