ArrayBlockingQueue:
LinkedBlockingQueue:
首先使用讀寫兩把鎖,讀線程和寫線程在鎖的範圍互不影響,性能更新,那爲啥ArrayBlockingQueue爲啥不使用兩把鎖暱?
沒有官方解釋。
ArrayBlockingQueue可以使用兩把鎖,並且性能也會更好。
但是
1.LinkedBlockingQueue是由鏈表組成操作的分別是頭尾節點,相互競爭的關係較小。而ArrayBlockingQueue是數組,添加和刪除都是在同一個數組上,雖然也可以用兩個鎖但是實現上需要更多的控制。
2.LinkedBlockingQueue添加元素時有一個構造節點的時間(寫的時候耗時較高,影響讀),爲了儘量減少這部分時間佔比,使用一個讀鎖一個寫鎖可以實現併發存取的優化(這也正是讀寫鎖的優勢)。而ArrayBlockingQueue在添加元素時不需要開闢空間等等(創建時指定數組大小)。
1、併發隊列 – 有界阻塞隊列 ArrayBlockingQueue 原理探究