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

溫馨提示×

溫馨提示×

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

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

java中ThreadPoolExecutor知識有哪些

發布時間:2021-11-19 15:59:42 來源:億速云 閱讀:114 作者:iii 欄目:編程語言

本篇內容介紹了“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工作流程

流程圖如下:

大致過程陳述為:

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

線程池中使用的阻塞隊列

ArrayBlockingQueue:基于數組結構的有界阻塞隊列,構造函數一定要傳大小,FIFO(先進先出);  LinkedBlockingQueue:無界,默認大小65536(Integer.MAX_VALUE),當大量請求任務時,容易造成內存耗盡。  SynchronousQueue:同步隊列,是一個特殊的BlockingQueue,它沒有容量(這是因為在SynchronousQueue中,插入將等待另一個線程的刪除操作,反之亦然)。  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的方式,這樣的處理方式讓寫的人員更加明確線程池的運行規則,規避資源耗盡的風險。

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

本文標題: java中ThreadPoolExecutor常識匯總

方法名說明注意
線程池使用的阻塞隊列線程池大小超時

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

向AI問一下細節

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

AI

南安市| 句容市| 工布江达县| 清苑县| 龙里县| 高密市| 柳江县| 阳信县| 军事| 临高县| 谢通门县| 略阳县| 马尔康县| 上饶市| 保山市| 抚松县| 弥勒县| 永和县| 乳山市| 青川县| 西安市| 凌源市| 东海县| 邵阳市| 京山县| 龙南县| 武宁县| 宝清县| 台前县| 阿拉善盟| 东阳市| 通州区| 晴隆县| 安多县| 新乡市| 林口县| 玉溪市| 元氏县| 柘城县| 新民市| 宜章县|