中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Java中Executor的使用方法

發布時間:2021-07-13 09:21:59 來源:億速云 閱讀:121 作者:chen 欄目:大數據

本篇內容介紹了“Java中Executor的使用方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在上一篇我們簡單的介紹了線程池的使用,雖然線程池比我們直接使用原始的線程類更加方便,但在創建線程池對象時對參數的設置是需要開發人員精心考量的,否則線程池并不會實現我們滿意的效果。在實際的開發中,我們用的最多的線程框架其實不是線程池而是Executor。它為我們創建一個線程池提供了更方便的方法。Executor是一個接口,它是Executor框架的基礎,它使任務的提交與任務的執行分離。底層仍然使用的是線程池。通過Executor框架的工具類Executors,可以創建3種類型的線程池它們分別是:FixedThreadPool、SingleThreadExecutor、CachedThreadPool。下面我們分別看一下它們之間的區別。

FixedThreadPool:可重用固定線程數的線程池。

Java中Executor的使用方法

我們從源碼中可以看出newFixedThreadPool()方法將線程池中的初始化的線程數和允許最大的線程數都設置成了參數值。也就是說我們參數傳遞的是多少就同時有多少個線程在同時執行。并且它又創建了LinkedBlockingQueue來實現線程池中的隊列服務。我們知道LinkedBlockingQueue是一個無界隊列,也就是說它可以存儲很多個線程任務,當線程池中的并發任務大于線程池中允許的最大數時,就會將任務保存到此隊列中。當有線程執行完畢后,線程池在從隊列中取出相應的任務去執行。并且我發們發現newFixedThreadPool()方法中已經將keepAliveTime設置為0,目的是如果有線程執行完任務后,要求立即終止。

SingleThreadExecutor:單個線程的線程池。

Java中Executor的使用方法

我們看出SingleThreadExecutor()和newFixedThreadPool()方法幾乎一樣,只是設置了線程池的初始化線程數和允許的最大線程數都是1。執行的過程和上訴的邏輯一樣。

CachedThreadPool:根據需要創建新線程的線程池。

Java中Executor的使用方法

我們看CachedThreadPool()將corePool設置為0,把maximumPoolSize設置最Integer.MAX_VALUE。意思是在創建這個線程池時,沒有初始化空閑線程,而是如果有任務添加,那么它就會創建一個新線程。

下面我們看一下具體的代碼。

FixedThreadPool

Java中Executor的使用方法

Java中Executor的使用方法

因為我們只創建了2個線程,所以這個線程池的最大并發數就是2,所以任務一任務二是先同時輸出的,任務三是后輸出的。因為任務三被添加到了隊列中,只有其它任務執行完,才會執行隊列中的任務。

SingleThreadExecutor

Java中Executor的使用方法

Java中Executor的使用方法

Java中Executor的使用方法

因為SingleThreadExecutor線程池最大的并發數是1,所以當我們提交3個任務時,只有一個會執行另外兩個會被添加到隊列中,所以執行的結果顯示只有一個線程。

CachedThreadPool

Java中Executor的使用方法

Java中Executor的使用方法

Java中Executor的使用方法

我們知道CachedThreadPool線程池中初始化的空閑線程是0,但是它允許的最大線程數是Integer.MAX_VALUE也就相當于無限大。所以我們在提交任務時,因為沒有超過允許的最大線程數所以線程池就會為我們創建一個新線程。所以任務一任務二任務三都是并行執行的。

“Java中Executor的使用方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

肇庆市| 岢岚县| 金乡县| 海宁市| 马龙县| 康平县| 沈丘县| 吴川市| 潜江市| 黑龙江省| 广汉市| 城口县| 韶关市| 永吉县| 高陵县| 松原市| 民勤县| 新安县| 富川| 都匀市| 斗六市| 上栗县| 阳东县| 秦皇岛市| 桂阳县| 宁强县| 两当县| 锦州市| 遵义市| 合水县| 曲麻莱县| 西青区| 河间市| 新绛县| 隆尧县| 呼和浩特市| 广水市| 高淳县| 天峻县| 英山县| 四平市|