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

溫馨提示×

溫馨提示×

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

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

線程池阻塞隊列為什么都用LinkedBlockingQueue

發布時間:2021-12-23 17:15:15 來源:億速云 閱讀:517 作者:柒染 欄目:大數據

今天就跟大家聊聊有關線程池阻塞隊列為什么都用LinkedBlockingQueue,可能很多人都不太了解,為了讓大家更加了解,小編給大家總結了以下內容,希望大家根據這篇文章可以有所收獲。

不管是Executors提供的幾種線程池,還是Spring提供的線程池,你會發現阻塞隊列用的都是LinkedBlockingQueue,而不是用的ArrayBlockingQueue

LinkedBlockingQueue

使用單鏈表實現,提供3種構造函數

  1. LinkedBlockingQueue() 無參構造函數,鏈表長度為Integer.MAX_VALUE

  2. LinkedBlockingQueue(int capacity) 指定capacity長度

  3. LinkedBlockingQueue(Collection c) 不指定長度,即默認長度為Integer.MAX_VALUE,提供初始化元素

鏈表節點由Node對象組成,每個Node有item變量用于存儲元素,next變量指向下一個節點

執行put的時候,將元素放到鏈表尾部節點;take的時候從頭部取元素

兩種操作分別有一個鎖putLock, takeLock,互不影響,可以同時進行

/** Lock held by take, poll, etc */
private final ReentrantLock takeLock = new ReentrantLock();

/** Lock held by take, poll, etc */
private final ReentrantLock takeLock = new ReentrantLock();
ArrayBlockingQueue

使用數組實現,3種構造函數

  1. ArrayBlockingQueue(int capacity) 指定長度

  2. ArrayBlockingQueue(int capacity, boolean fair) 指定長度,及指定是否使用FIFO順序進出隊列

  3. ArrayBlockingQueue(int capacity, boolean fair, Collection c) 指定長度,進行隊列順序,初始元素

從構造函數看出,ArrayBlockingQueue必須指定初始化長度,如果線程池使用該隊列,指定長度大了浪費內存,長度小隊列并發性不高,在數組滿的時候,put操作只能阻塞等待,或者返回false

ArrayBlockingQueue 只定義了一個Lock,put和take使用同一鎖,不能同時進行

/** Main lock guarding all access */
    final ReentrantLock lock;
  1. LinkedBlockingQueue 無須指定長度,放入和取出元素使用不同的鎖,互不影響,效率高,通用性強

  2. ArrayBlockingQueue 必須指定長度,大了浪費內存,小了性能不高,使用同一把鎖,效率低

看完上述內容,你們對線程池阻塞隊列為什么都用LinkedBlockingQueue有進一步的了解嗎?如果還想了解更多知識或者相關內容,請關注億速云行業資訊頻道,感謝大家的支持。

向AI問一下細節

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

AI

雅安市| 望都县| 陕西省| 邹城市| 昔阳县| 德安县| 南岸区| 岑巩县| 日土县| 濮阳县| 广饶县| 巴楚县| 小金县| 无棣县| 泰兴市| 昆明市| 彭水| 厦门市| 雅安市| 丰台区| 梓潼县| 河津市| 鹤岗市| 新密市| 抚州市| 阿坝县| 沙雅县| 盐池县| 乌苏市| 灵武市| 叶城县| 涪陵区| 固镇县| 西贡区| 临湘市| 黎川县| 宁武县| 邵阳市| 花莲县| 神农架林区| 诸城市|