建議126:適時(shí)選擇不同的線程池來實(shí)現(xiàn)
Java的線程池實(shí)現(xiàn)從根本上來說只有兩個(gè):ThreadPoolExecutor類和ScheduledThreadPoolExecutor類,這兩個(gè)類還是父子關(guān)系,但是Java為了簡(jiǎn)化并行計(jì)算,還提供了一個(gè)Exceutors的靜態(tài)類,它可以直接生成多種不同的線程池執(zhí)行器,比如單線程執(zhí)行器、帶緩沖功能的執(zhí)行器等,但歸根結(jié)底還是使用ThreadPoolExecutor類或ScheduledThreadPoolExecutor類的封裝類。
為了理解這些執(zhí)行器,我們首先來看看ThreadPoolExecutor類,其中它復(fù)雜的構(gòu)造函數(shù)可以很好的理解線程池的作用,代碼如下:
public class ThreadPoolExecutor extends AbstractExecutorService { // 最完整的構(gòu)造函數(shù) public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler) { // 檢驗(yàn)輸入條件 if (corePoolSize < 0 || maximumPoolSize <= 0 || maximumPoolSize < corePoolSize || keepAliveTime < 0)