欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

java中ThreadPoolExecutor常識匯總

 更新時間:2019年06月21日 09:16:25   作者:有愛jj  
這篇文章主要介紹了java中ThreadPoolExecutor常識匯總,線程池技術在并發(fā)時經(jīng)常會使用到,java中的線程池的使用是通過調(diào)用ThreadPoolExecutor來實現(xiàn)的,需要的朋友可以參考下

線程池技術在并發(fā)時經(jīng)常會使用到,java中的線程池的使用是通過調(diào)用ThreadPoolExecutor來實現(xiàn)的。ThreadPoolExecutor提供了四個構造函數(shù),最后都會歸結于下面這個構造方法:

// 七個參數(shù)的構造函數(shù)
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)

這些參數(shù)的意義如下:

  • corePoolSize:該線程池中核心線程數(shù)最大值
  • maximumPoolSize: 該線程池中線程總數(shù)最大值
  • keepAliveTime:該線程池中非核心線程閑置超時時長
  • unit:keepAliveTime的單位
  • workQueue:阻塞隊列BlockingQueue,維護著等待執(zhí)行的Runnable對象
  • threadFactory:創(chuàng)建線程的接口,需要實現(xiàn)他的Thread newThread(Runnable r)方法。
  • RejectedExecutionHandler:飽和策略,最大線程和工作隊列容量且已經(jīng)飽和時execute方法都將調(diào)用RejectedExecutionHandler 。

ThreadPoolExecutor工作流程

流程圖如下:

大致過程陳述為:

  1. 向線程池中添加任務,當任務數(shù)量少于corePoolSize時,會自動創(chuàng)建thead來處理這些任務;
  2. 當添加任務數(shù)大于corePoolSize且少于maximmPoolSize時,不在創(chuàng)建線程,而是將這些任務放到阻塞隊列中,等待被執(zhí)行;
  3. 接上面2的條件,且當阻塞隊列滿了之后,繼續(xù)創(chuàng)建thread,從而加速處理阻塞隊列;
  4. 當添加任務大于maximmPoolSize時,根據(jù)飽和策略決定是否容許繼續(xù)向線程池中添加任務,默認的飽和策略是AbortPolicy(直接丟棄)。

線程池中使用的阻塞隊列

  • ArrayBlockingQueue:基于數(shù)組結構的有界阻塞隊列,構造函數(shù)一定要傳大小,F(xiàn)IFO(先進先出);
  • LinkedBlockingQueue:無界,默認大小65536(Integer.MAX_VALUE),當大量請求任務時,容易造成內(nèi)存耗盡。
  • SynchronousQueue:同步隊列,是一個特殊的BlockingQueue,它沒有容量(這是因為在SynchronousQueue中,插入將等待另一個線程的刪除操作,反之亦然)。具體可以參考:《Java SynchronousQueue Examples(譯)》
  • PriorityBlockingQueue: 優(yōu)先隊列,無界。
  • DelayedWorkQueue:這個隊列接收到任務時,首先先入隊,只有達到了指定的延時時間,才會執(zhí)行任務

阻塞隊列常見的方法如下表所示:

方法名 說明 注意
add 增加一個元索 如果隊列已滿,則拋出一個IIIegaISlabEepeplian異常
remove 移除并返回隊列頭部的元素 如果隊列為空,則拋出一個NoSuchElementException異常
element 返回隊列頭部的元素 如果隊列為空,則拋出一個NoSuchElementException異常
offer 添加一個元素并返回true 如果隊列已滿,則返回false
poll 移除并返問隊列頭部的元素 如果隊列為空,則返回null
peek 返回隊列頭部的元素 如果隊列為空,則返回null
put 添加一個元素 如果隊列滿,則阻塞
take 移除并返回隊列頭部的元素 如果隊列為空,則阻塞

常見四種線程池

  • newCachedThreadPool
  • newFixedThreadPool
  • newSingleThreadExecutor
  • newScheduledThreadPool

線程池 使用的阻塞隊列 線程池大小 超時
CachedThreadPool SynchronousQueue(隊列長度無限 可增加,最大值Integer.MAX_VALUE 默認60秒超時
FixedThreadPool LinkedBlockingQueue(隊列長度無限) 可指定nThreads,固定數(shù)量 不會超時
newSingleThreadExecutor LinkedBlockingQueue(隊列長度無限), 固定為1 不超時
newScheduledThreadPool DelayedWorkQueue 可增加,最大值Integer.MAX_VALUE 不超時

它們通過Executors以靜態(tài)方法的方式直接調(diào)用,實質上是它們最終調(diào)用的是ThreadPoolExecutor的構造方法,也就是本文最前面那段代碼。

注:KeepAliveTime=0的話,表示不等待

《阿里巴巴java開發(fā)手冊》中建議線程池不使用 Executors 去創(chuàng)建,而是通過 ThreadPoolExecutor的方式,這樣的處理方式讓寫的人員更加明確線程池的運行規(guī)則,規(guī)避資源耗盡的風險。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java Spring循環(huán)依賴原理與bean的生命周期圖文案例詳解

    Java Spring循環(huán)依賴原理與bean的生命周期圖文案例詳解

    這篇文章主要介紹了Spring循環(huán)依賴原理與bean的生命周期圖文案例詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-09-09
  • SpringBoot解析yml全流程詳解

    SpringBoot解析yml全流程詳解

    本文主要介紹了SpringBoot解析yml全流程詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • mybatis返回key value map集合方式

    mybatis返回key value map集合方式

    這篇文章主要介紹了mybatis返回key value map集合方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Spring?Security短信驗證碼實現(xiàn)詳解

    Spring?Security短信驗證碼實現(xiàn)詳解

    本文主要介紹了Spring?Security短信驗證碼的實現(xiàn)詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-11-11
  • SpringBoot中的multipartResolver上傳文件配置

    SpringBoot中的multipartResolver上傳文件配置

    這篇文章主要介紹了SpringBoot中的multipartResolver上傳文件配置,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-10-10
  • JAVA獲得包含0-9、a-z、A-Z范圍內(nèi)字符串的的隨機數(shù)實例

    JAVA獲得包含0-9、a-z、A-Z范圍內(nèi)字符串的的隨機數(shù)實例

    這篇文章主要介紹了JAVA獲得包含0-9、a-z、A-Z范圍內(nèi)字符串的的隨機數(shù)實例,包含隨機數(shù)字、隨機字符串的獲取方法,需要的朋友可以參考下
    2014-07-07
  • Java深入探索線程安全和線程通信的特性

    Java深入探索線程安全和線程通信的特性

    這篇文章主要介紹了Java線程安全和線程通信的特性,線程安全是多線程編程時的計算機程序代碼中的一個概念。在擁有共享數(shù)據(jù)的多條線程并行執(zhí)行的程序中,線程安全的代碼會通過同步機制保證各個線程都可以正常且正確的執(zhí)行,不會出現(xiàn)數(shù)據(jù)污染等意外情況
    2022-05-05
  • 詳解Java中異步轉同步的六種方法

    詳解Java中異步轉同步的六種方法

    針對應用中異步調(diào)用,能不能像同步調(diào)用一樣立刻獲取到命令的執(zhí)行結果,如何實現(xiàn)異步轉同步?不要擔心,本文就來為大家詳細講講Java中異步轉同步的六種方法,感興趣的可以了解一下
    2022-06-06
  • Java垃圾回收機制算法詳解

    Java垃圾回收機制算法詳解

    這篇文章主要介紹了Java垃圾回收機制算法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • java模擬微信搶紅包的實例代碼

    java模擬微信搶紅包的實例代碼

    現(xiàn)在搶紅包的功能很受歡迎,本篇文章主要介紹了java模擬微信搶紅包的實例代碼。具有一定的參考價值,感興趣的小伙伴們可以參考一下。
    2017-03-03

最新評論