91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

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

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

Java線程池實現原理是什么

發布時間:2022-01-21 17:07:44 來源:億速云 閱讀:208 作者:iii 欄目:開發技術

這篇文章主要講解了“Java線程池實現原理是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java線程池實現原理是什么”吧!

一、線程池參數

  • 1、corePoolSize(必填):核心線程數。

  • 2、maximumPoolSize(必填):最大線程數。

  • 3、keepAliveTime(必填):線程空閑時長。如果超過該時長,非核心線程就會被回收。

  • 4、unit(必填):指定keepAliveTime的時間單位。常用的有:TimeUnit.MILLISECONDS(毫秒)、TimeUnit.SECONDS(秒)、TimeUnit.MINUTES(分)。

  • 5、workQueue(必填):任務隊列。通過線程池的execute()方法提交的Runnable對象將存儲在該隊列中。

  • 6、threadFactory(可選):線程工廠。一般就用默認的。

  • 7、handler(可選):拒絕策略。當線程數達到最大線程數時就要執行飽和策略。

說下核心線程數和最大線程數的區別

拒絕策略可選值:

1、AbortPolicy(默認):放棄任務并拋出RejectedExecutionException異常。
2、CallerRunsPolicy:由調用線程處理該任務。
3、DiscardPolicy:放棄任務,但是不拋出異常。可以配合這種模式進行自定義的處理方式。
4、DiscardOldestPolicy:放棄隊列最早的未處理任務,然后重新嘗試執行任務。

二、線程池執行流程

簡短的總結下線程池執行流程:

  • 1、一個任務提交到線程池后,如果當前的線程數沒達到核心線程數,則新建一個線程并且執行新任務,注意一點,這個新任務執行完后,該線程不會被銷毀;

  • 2、如果達到了,則判斷任務隊列滿了沒,如果沒滿,則將任務放入任務隊列;

  • 3、如果滿了,則判斷當前線程數量是否達到最大線程數,如果沒達到,則創建新線程來執行任務,注意,如果線程池中線程數量大于核心線程數,每當有線程超過了空閑時間,就會被銷毀,直到線程數量不大于核心線程數;

  • 4、如果達到了最大線程數,并且任務隊列滿了,就會執行飽和策略;

三、四種現成的線程池

不想自己new線程池的話,可以用現成的

1、定長線程池(FixedThreadPool)

特點:只有核心線程,線程數量固定,執行完立即回收,任務隊列為鏈表結構的有界隊列。
應用場景:控制線程最大并發數

2、定時線程池(ScheduledThreadPool )

特點:核心線程數量固定,非核心線程數量無限,執行完閑置10ms后回收,任務隊列為延時阻塞隊列。
應用場景:執行定時或周期性的任務。

3、可緩存線程池(CachedThreadPool)

特點:無核心線程,非核心線程數量無限,執行完閑置60s后回收,任務隊列為不存儲元素的阻塞隊列。
應用場景:執行大量、耗時少的任務。

4、單線程化線程池(SingleThreadExecutor)

特點:只有1個核心線程,無非核心線程,執行完立即回收,任務隊列為鏈表結構的有界隊列。
應用場景:不適合并發但可能引起IO阻塞性及影響UI線程響應的操作,如數據庫操作、文件操作等。

上述四個線程池雖然方便,但是阿里巴巴規范明確說明不建議使用,因為可能會造成內存溢出,具體原因如下:

FixedThreadPoolSingleThreadExecutor:主要問題是堆積的請求處理隊列均采用LinkedBlockingQueue,可能會耗費非常大的內存,嚴重的直接導致內存溢出。
CachedThreadPoolScheduledThreadPool:主要問題是它們的最大線程數是Integer.MAX_VALUE,可能會創建數量非常多的線程,嚴重的直接導致內存溢出。

感謝各位的閱讀,以上就是“Java線程池實現原理是什么”的內容了,經過本文的學習后,相信大家對Java線程池實現原理是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

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

AI

彭阳县| 阿图什市| 丹凤县| 磐安县| 南通市| 武山县| 牙克石市| 库尔勒市| 滨州市| 太谷县| 公安县| 张北县| 即墨市| 阳城县| 沅陵县| 和田县| 左权县| 唐山市| 讷河市| 平江县| 自治县| 句容市| 桐庐县| 临泉县| 凤阳县| 鄂尔多斯市| 灵丘县| 长岭县| 凌源市| 彭水| 从江县| 横峰县| 多伦县| 铜川市| 会理县| 赣榆县| 荥经县| 漳平市| 施秉县| 杭锦后旗| 贺州市|