ArrayBlockingQueue爲啥不和LinkedBlockingQueue使用讀寫兩把鎖?

ArrayBlockingQueue:

LinkedBlockingQueue:

首先使用讀寫兩把鎖,讀線程和寫線程在鎖的範圍互不影響,性能更新,那爲啥ArrayBlockingQueue爲啥不使用兩把鎖暱?

沒有官方解釋。

ArrayBlockingQueue可以使用兩把鎖,並且性能也會更好。

但是

1.LinkedBlockingQueue是由鏈表組成操作的分別是頭尾節點,相互競爭的關係較小。而ArrayBlockingQueue是數組,添加和刪除都是在同一個數組上,雖然也可以用兩個鎖但是實現上需要更多的控制。

2.LinkedBlockingQueue添加元素時有一個構造節點的時間(寫的時候耗時較高,影響讀),爲了儘量減少這部分時間佔比,使用一個讀鎖一個寫鎖可以實現併發存取的優化(這也正是讀寫鎖的優勢)。而ArrayBlockingQueue在添加元素時不需要開闢空間等等(創建時指定數組大小)。

 

 

1、併發隊列 – 有界阻塞隊列 ArrayBlockingQueue 原理探究

2、解讀 Java 併發隊列 BlockingQueue

3、併發隊列:無界阻塞隊列 LinkedBlockingQueue 原理探究

4、面試侃集合: LinkedBlockingQueue

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章