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

溫馨提示×

溫馨提示×

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

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

Java中ThreadPoolExecutor類的詳細講解

發布時間:2021-08-02 11:03:26 來源:億速云 閱讀:163 作者:chen 欄目:開發技術

這篇文章主要介紹“Java中ThreadPoolExecutor類的詳細講解”,在日常操作中,相信很多人在Java中ThreadPoolExecutor類的詳細講解問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java中ThreadPoolExecutor類的詳細講解”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

ThreadPoolExecutor

ThreadPoolExecutor是線程池框架的一個核心類,線程池通過線程復用機制,并對線程進行統一管理

  • 降低系統資源消耗。通過復用已存在的線程,降低線程創建和銷毀造成的消耗;

  • 提高響應速度。當有任務到達時,無需等待新線程的創建便能立即執行;

  • 提高線程的可管理性。線程是稀缺資源,如果無限制的創建,不僅會消耗大量系統資源,還會降低系統的穩 定性,使用線程池可以進行對線程進行統一的分配、調優和監控。

線程池的運行狀態總共有5種,其值和含義分別如下:

  • RUNNING: 高3位為111,接受新任務并處理阻塞隊列中的任務

  • SHUTDOWN: 高3位為000,不接受新任務但會處理阻塞隊列中的任務

  • STOP:高3位為001,不會接受新任務,也不會處理阻塞隊列中的任務,并且中斷正在運行的任務

  • TIDYING: 高3位為010,所有任務都已終止,工作線程數量為0,線程池將轉化到TIDYING狀態,即將要執行 terminated()結束鉤子方法

  • TERMINATED: 高3位為011,terminated()方法已經執行結束

構造器中各個參數的含義:

1.corePoolSize
線程池中的核心線程數。當提交一個任務時,線程池創建一個新線程執行任務,直到當前線程數等于 corePoolSize;如果當前線程數為corePoolSize,繼續提交的任務被保存到阻塞隊列中,等待被執行。

2.maximumPoolSize
線程池中允許的大線程數。如果當前阻塞隊列滿了,且繼續提交任務,則創建新的線程執行任務,前提是當前線 程數小于maximumPoolSize。

3.keepAliveTime

線程空閑時的存活時間。默認情況下,只有當線程池中的線程數大于corePoolSize時,keepAliveTime才會起作 用,如果一個線程空閑的時間達到keepAliveTime,則會終止,直到線程池中的線程數不超過corePoolSize。但是 如果調用了allowCoreThreadTimeOut(boolean)方法,keepAliveTime參數也會起作用,直到線程池中的線程數為 0。

4.unit
keepAliveTime參數的時間單位。

5.workQueue
任務緩存隊列,用來存放等待執行的任務。如果當前線程數為corePoolSize,繼續提交的任務就會被保存到任務緩 存隊列中,等待被執行。
一般來說,這里的BlockingQueue有以下三種選擇:
SynchronousQueue:一個不存儲元素的阻塞隊列,每個插入操作必須等到另一個線程調用移除操作,否則 插入操作一直處于阻塞狀態。因此,如果線程池中始終沒有空閑線程(任務提交的平均速度快于被處理的速 度),可能出現無限制的線程增長。 LinkedBlockingQueue:基于鏈表結構的阻塞隊列,如果不設置初始化容量,其容量Integer.MAX_VALUE, 即為無界隊列。因此,如果線程池中線程數達到了corePoolSize,且始終沒有空閑線程(任務提交的平均速度 快于被處理的速度),任務緩存隊列可能出現無限制的增長。 ArrayBlockingQueue:基于數組結構的有界阻塞隊列,按FIFO排序任務。

6.threadFactory
線程工廠,創建新線程時使用的線程工廠。

7.handler
任務拒絕策略,當阻塞隊列滿了,且線程池中的線程數達到maximumPoolSize,如果繼續提交任務,就會采取任 務拒絕策略處理該任務,線程池提供了4種任務拒絕策略:

  • AbortPolicy:丟棄任務并拋出RejectedExecutionException異常,默認策略;

  • CallerRunsPolicy:由調用execute方法的線程執行該任務;

  • DiscardPolicy:丟棄任務,但是不拋出異常;

  • DiscardOldestPolicy:丟棄阻塞隊列前面的任務,然后重新嘗試執行任務(重復此過程)。

  • 當然也可以根據應用場景實現RejectedExecutionHandler接口自定義飽和策略,如記錄日志或持久化存儲不能處 理的任務。

到此,關于“Java中ThreadPoolExecutor類的詳細講解”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

桃园县| 河东区| 宝应县| 区。| 布尔津县| 正安县| 郸城县| 土默特右旗| 洛浦县| 桑植县| 萨嘎县| 嫩江县| 陆河县| 蓝田县| 乌苏市| 乌拉特后旗| 永新县| 壤塘县| 瓮安县| 临夏县| 静宁县| 吉木萨尔县| 微博| 历史| 锦屏县| 正安县| 偃师市| 安吉县| 清河县| 夹江县| 石门县| 永康市| 贵定县| 建瓯市| 南开区| 永胜县| 临江市| 辉南县| 金川县| 康乐县| 满洲里市|