Java的四種線程池的使用,以及自定義線程工廠

四種線程池

四種線程池分別是:newCachedThreadPool、newFixedThreadPool 、newScheduledThreadPool 和newSingleThreadExecutor ,下面對這幾個線程池一一講解。

newCachedThreadPool:可緩存的線程池

源碼:


Java的四種線程池的使用,以及自定義線程工廠


newCachedThreadPool的方法中是返回一個ThreadPoolExecutor實例,從源碼中可以看出該線程池的特點:

1、該線程池的核心線程數量是0,線程的數量最高可以達到Integer 類型最大值;

2、創建ThreadPoolExecutor實例時傳過去的參數是一個SynchronousQueue實例,說明在創建任務時,若存在空閒線程就複用它,沒有的話再新建線程。

3、線程處於閒置狀態超過60s的話,就會被銷燬。

用法:


Java的四種線程池的使用,以及自定義線程工廠


上面的代碼因為每次循環都是隔一秒執行,這個時間足夠之前的線程工作完畢,並在新循環中複用這個線程,程序的運行結果如下:


Java的四種線程池的使用,以及自定義線程工廠


newFixedThreadPool:定長線程池

源碼:


Java的四種線程池的使用,以及自定義線程工廠


線程池特點:

1、線程池的最大線程數等於核心線程數,並且線程池的線程不會因為閒置超時被銷燬。

2、使用的列隊是LinkedBlockingQueue,表示如果當前線程數小於核心線程數,那麼即使有空閒線程也不會複用線程去執行任務,而是創建新的線程去執行任務。如果當前執行任務數量大於核心線程數,此時再提交任務就在隊列中等待,直到有可用線程。

用法:


Java的四種線程池的使用,以及自定義線程工廠


定義一個線程數為3的線程池,循環10次執行,可以發現運行的線程永遠只有三個,結果如下:


Java的四種線程池的使用,以及自定義線程工廠


newSingleThreadExecutor:單線程線程池

源碼:


Java的四種線程池的使用,以及自定義線程工廠


從源碼就可以看出,該線程池基本就是隻有一個線程數的newFixedThreadPool,它只有一個線程在工作,所有任務按照指定順序執行。

用法:

和newFixedThreadPool類似,只是一直只有一個線程在工作,這裡就不貼代碼了。

newScheduledThreadPool:支持定時的定長線程池

源碼:


Java的四種線程池的使用,以及自定義線程工廠


newScheduledThreadPool的方法不是直接返回一個ThreadPoolExecutor實例,而是通過有定時功能的ThreadPoolExecutor,也就是ScheduledThreadPoolExecutor 來返回ThreadPoolExecutor實例,從源碼中可以看出:

1、該線程池可以設置核心線程數量,最大線程數與newCachedThreadPool一樣,都是Integer.MAX_VALUE。

2、該線程池採用的隊列是DelayedWorkQueue,具有延遲和定時的作用。

用法:


Java的四種線程池的使用,以及自定義線程工廠


自定義ThreadFactory

四種線程池的使用就說到這裡了,值得說明的是,除了上面的參數外,Executors類中還給這四種線程池提供了可傳ThreadFactory的重載方法,以下是它們的源碼:


Java的四種線程池的使用,以及自定義線程工廠


ThreadFactory是一個接口類,也就是我們經常說的線程工廠,只有一個方法,可以用於創建線程:

Thread newThread(Runnable r);

默認情況下,ThreadPoolExecutor構造器傳入的ThreadFactory 參數是Executors類中的defaultThreadFactory(),相當於一個線程工廠,幫我們創建了線程池中所需的線程。在此我向大家推薦一個架構學習交流圈:830478757 幫助突破瓶頸 提升思維能力

除此之外,我們也可以自定義ThreadFactory,並根據自己的需要來操作線程,下面是實例代碼:


Java的四種線程池的使用,以及自定義線程工廠


運行代碼後,控制行會輸出五行 “我是線程java.util.concurrent.ThreadPoolExecutor。。。。。”的信息,也證明了我們自定義的ThreadFactory起到了作用。

原文:https://blog.csdn.net/honghailiang888/article/details/51690711

感謝大家的支持,小編給粉絲們準備了書籍+視頻資料哦。麻煩轉發+關注。私信我“資料"


分享到:


相關文章: