并發(fā)包下的線程池技術(shù)雖然常用,但是知識點較多易忘。所以轧粟,參考網(wǎng)絡資源做了一個小結(jié),便于復習脓魏。
1.Executor接口
用于執(zhí)行已提交的Runnable任務逃延。
2.ExecutorService接口
繼承自Executor接口。
3.ScheduledExecutorService接口
繼承自ExecutorService接口轧拄,在給定的延遲后執(zhí)行任務或定時執(zhí)行任務,類圖如下讽膏。
4.RejectedExecutionHandler接口
當Executor已經(jīng)關(guān)閉或任務隊列已經(jīng)飽和時檩电,提交新任務時,Executor對應的處理策略府树。
5.RejectedExecutionHandler接口實現(xiàn)類
RejectedExecutionHandler接口4個實現(xiàn)類對應4種處理策略:
6.BlockingQueue接口
BlockingQueue接口定義任務隊列俐末。
7.ArrayBlockingQueue類
實現(xiàn)了BlockingQueue接口。一個由數(shù)組支持的有界阻塞隊列奄侠。此隊列按 FIFO(先進先出)原則對元素進行排序卓箫。隊列的頭部是在隊列中存在時間最長的元素。隊列的尾部是在隊列中存在時間最短的元素垄潮。新元素插入到隊列的尾部烹卒,隊列獲取操作則是從隊列頭部開始獲得元素。類圖如下圖所示弯洗。
8.Executors類
為ExecutorService旅急、ScheduledExecutorService、ThreadFactory和Callable提供了便捷的工廠方法牡整。
此類支持以下各種方法:
* 創(chuàng)建并返回設置有常用配置字符串的 ExecutorService 的方法藐吮。
* 創(chuàng)建并返回設置有常用配置字符串的 ScheduledExecutorService 的方法。
* 創(chuàng)建并返回“包裝的”ExecutorService 方法,它通過使特定于實現(xiàn)的方法不可訪問來禁用重新配置谣辞。
* 創(chuàng)建并返回 ThreadFactory 的方法迫摔,它可將新創(chuàng)建的線程設置為已知的狀態(tài)。
* 創(chuàng)建并返回非閉包形式的 Callable 的方法泥从,這樣可將其用于需要 Callable 的執(zhí)行方法中句占。
9.ThreadPoolExecutor類
類圖如下圖所示。
ThreadPoolExecutor使用Executors工廠方法Executors.newCachedThreadPool()(無界線程池歉闰,可以進行自動線程回收)辖众、Executors.newFixedThreadPool(int)(固定大小線程池)和 Executors.newSingleThreadExecutor()(單個后臺線程)配置的線程池執(zhí)行每個提交的任務。
使用構(gòu)造方法可以創(chuàng)建一個自定義的線程池和敬。ThreadPoolExecutor將根據(jù)corePoolSize和maximumPoolSize設置的邊界自動調(diào)整池大小凹炸。當新任務在方法execute(java.lang.Runnable) 中提交時,如果運行的線程少于corePoolSize昼弟,則創(chuàng)建新線程來處理請求啤它,即使其他輔助線程是空閑的。如果運行的線程多于corePoolSize而少于 maximumPoolSize舱痘,則僅當隊列滿時才創(chuàng)建新線程变骡。如果設置的corePoolSize和maximumPoolSize相同,則創(chuàng)建了固定大小的線程池芭逝。如果將 maximumPoolSize 設置為基本的無界值(如Integer.MAX_VALUE)塌碌,則允許池適應任意數(shù)量的并發(fā)任務。在大多數(shù)情況下旬盯,核心和最大池大小僅基于構(gòu)造來設置台妆,不過也可以使用setCorePoolSize(int)和 setMaximumPoolSize(int)進行動態(tài)更改。所有BlockingQueue都可用于傳輸和保持提交的任務胖翰〗邮#可以使用此隊列與池大小進行交互:
* 如果運行的線程少于corePoolSize,則Executor始終首選添加新的線程萨咳,而不進行排隊懊缺。
* 如果運行的線程等于或多于corePoolSize,則Executor始終首選將請求加入隊列培他,而不添加新的線程鹃两。
* 如果無法將請求加入隊列,則創(chuàng)建新的線程舀凛,除非創(chuàng)建此線程超出maximumPoolSize怔毛,在這種情況下,任務將被拒絕腾降。
10.ScheduledThreadPoolExecutor類
實現(xiàn)了ScheduledExecutorService接口拣度,在給定的延遲后執(zhí)行任務,或者定時執(zhí)行任務,按照提交的先進先出(FIFO)順序來啟用那些被安排在同一執(zhí)行時間的任務抗果。類圖如下所示筋帖。
雖然此類繼承自ThreadPoolExecutor,但是幾個繼承的調(diào)整方法對此類并無作用冤馏。特別是日麸,因為它作為一個使用corePoolSize 線程和一個無界隊列的固定大小的池,所以調(diào)整maximumPoolSize沒有什么效果逮光。