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

溫馨提示×

溫馨提示×

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

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

web開發中使用無界隊列的線程池會不會導致內存飆升

發布時間:2022-10-17 17:41:48 來源:億速云 閱讀:103 作者:iii 欄目:編程語言

這篇文章主要介紹“web開發中使用無界隊列的線程池會不會導致內存飆升”,在日常操作中,相信很多人在web開發中使用無界隊列的線程池會不會導致內存飆升問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”web開發中使用無界隊列的線程池會不會導致內存飆升”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!

Executors創建線程池方式有如下幾種:

Executors.newFixedThreadPool(10);//LinkedBlockingQueue 無限加入隊列
Executors.newScheduledThreadPool(10);//DelayedWorkQueue 隊列如果滿了,阻塞
Executors.newSingleThreadScheduledExecutor();//DelayedWorkQueue 隊列如果滿了,阻塞
Executors.newCachedThreadPool();//SynchronousQueue 隊列如果滿了,拋異常
Executors.newSingleThreadExecutor();//LinkedBlockingQueue 無限加入隊列

本文以Executors.newFixedThreadPool為例 定長線程池,核心線程數和最大線程數由用戶傳入,超出在隊列等待,以下為相關源碼。

//newFixedThreadPool創建線程池源碼
public static ExecutorService newFixedThreadPool(int nThreads){
        /**
          *  corePoolSize : 核心線程的數量為自定義輸入nThreads

          *  maximumPoolSize : 最大線程的數量為自定義輸入nThreads

          *  keepAliveTime : 0L

          *  unit : 秒

          *  workQueue : LinkedBlockingQueue
          **/
        return new ThreadPoolExecutor(nThreads, nThreads,
                                      0L, TimeUnit.MILLISECONDS,
                                      new LinkedBlockingQueue<Runnable>());
    }

newFixedThreadPool和SingleThreadExecutor類似,唯一的區別就是核心線程數不同,并且由于使用的是LinkedBlockingQueue。LinkedBlockingQueue默認的最大任務數量是Integer.MAX_VALUE,非常大,可以理解為無限大吧;但是存在這種情況,當每個線程獲取到一個任務后,執行時間比較長,導致workQueue里積壓的任務越來越多,機器的內存使用不停的飆升,最后也會導致OOM。 jdk7提供了7個阻塞隊列,分別是:

ArrayBlockingQueue:一個由數組結構組成的有界阻塞隊列 LinkedBlockingQueue:一個由鏈表結構組成的有界阻塞隊列 PriorityBlockingQueue:一個支持優先級排序的無界阻塞隊列 DelayQueue:一個使用優先級隊列實現的無界阻塞隊列 SynchronousQueue:一個不存儲元素的阻塞隊列 LinkedTransferQueue:一個由鏈表結構組成的無界阻塞隊列 LinkedBlockingDueue:一個 由鏈表結構組成的雙向阻塞隊列

線程池工作原理圖解:

web開發中使用無界隊列的線程池會不會導致內存飆升

到此,關于“web開發中使用無界隊列的線程池會不會導致內存飆升”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!

向AI問一下細節

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

AI

高州市| 永平县| 定安县| 凤台县| 八宿县| 潼关县| 隆子县| 峨边| 玉溪市| 秦安县| 饶平县| 新化县| 潍坊市| 容城县| 延川县| 武平县| 广平县| 成安县| 湘潭县| 胶州市| 察哈| 襄垣县| 惠来县| 花莲市| 霍邱县| 永德县| 和硕县| 万全县| 余江县| 安溪县| 武城县| 浦北县| 丰顺县| 安远县| 家居| 琼中| 达孜县| 荆州市| 咸丰县| 宜春市| 保山市|