激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - java中ThreadPoolExecutor常識匯總

java中ThreadPoolExecutor常識匯總

2019-06-25 19:52有愛jj Java教程

這篇文章主要介紹了java中ThreadPoolExecutor常識匯總,線程池技術在并發時經常會使用到,java中的線程池的使用是通過調用ThreadPoolExecutor來實現的,需要的朋友可以參考下

線程池技術在并發時經常會使用到,java中的線程池的使用是通過調用ThreadPoolExecutor來實現的。ThreadPoolExecutor提供了四個構造函數,最后都會歸結于下面這個構造方法:

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

這些參數的意義如下:

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

ThreadPoolExecutor工作流程

流程圖如下:

java中ThreadPoolExecutor常識匯總

大致過程陳述為:

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

線程池中使用的阻塞隊列

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

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

 

方法名 說明 注意
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,固定數量 不會超時
newSingleThreadExecutor LinkedBlockingQueue(隊列長度無限), 固定為1 不超時
newScheduledThreadPool DelayedWorkQueue 可增加,最大值Integer.MAX_VALUE 不超時

 

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

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

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 成人免费av在线 | 中文字幕h | 亚洲性在线视频 | 色欲香天天天综合网站 | 爱逼av | 免费a级作爱片免费观看欧洲 | 国产在线精品区 | 亚洲精品aⅴ中文字幕乱码 欧美囗交 | 亚洲二区不卡 | 国产在线观看精品 | 毛片视频在线免费观看 | 国产亚洲精品久久久久5区 日韩一级片一区二区三区 国产精品久久久久av | 黄色免费在线网站 | 久久久日韩av免费观看下载 | 免费在线观看成人av | 亚洲无马在线观看 | 嗯~啊~弄嗯~啊h高潮视频 | 国产精彩视频在线 | 欧美性生交大片 | 久久久久久久久久久av | 日本不卡一区二区三区在线观看 | 亚洲射逼 | 羞羞的视频在线观看 | 久久久久久久免费精品 | 欧美精品一区二区久久 | 国产免费一区二区三区在线能观看 | 男女一边摸一边做羞羞视频免费 | 销魂美女一区二区 | 一级免费黄视频 | 九九热精品免费视频 | 欧美18—19sex性hd按摩 | 国产一区二区三区视频免费 | 免费观看三级毛片 | 午夜精品成人一区二区 | 久久久一区二区三区视频 | 国产日韩在线观看一区 | 九九热视频在线免费观看 | 美女黄网站免费观看 | 国产亚洲黑人性受xxxx精品 | 国产免费一区二区三区 | 中文字幕在线播放视频 |