亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

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

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

線程池阻塞隊列為什么都用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

禄劝| 临城县| 米脂县| 临泉县| 通州市| 体育| 南漳县| 南平市| 台中市| 新兴县| 格尔木市| 精河县| 舒城县| 德昌县| 闵行区| 墨竹工卡县| 永新县| 阿克苏市| 佛坪县| 绍兴县| 宣恩县| 榆中县| 黑龙江省| 连平县| 聊城市| 天峨县| 湘潭县| 新野县| 湖州市| 读书| 弥勒县| 凤凰县| 桓台县| 山东| 理塘县| 扬中市| 和田县| 聊城市| 扶风县| 大丰市| 庐江县|