本節(jié),我們來探討Java并發(fā)包中的各種隊(duì)列。Java并發(fā)包提供了豐富的隊(duì)列類,可以簡(jiǎn)單分為:

  • 無鎖非阻塞并發(fā)隊(duì)列:ConcurrentLinkedQueue和ConcurrentLinkedDeque

  • 普通阻塞隊(duì)列:基于數(shù)組的ArrayBlockingQueue,基于鏈表的LinkedBlockingQueue和LinkedBlockingDeque

  • 優(yōu)先級(jí)阻塞隊(duì)列:PriorityBlockingQueue

  • 延時(shí)阻塞隊(duì)列:DelayQueue

  • 其他阻塞隊(duì)列:SynchronousQueue和LinkedTransferQueue

無鎖非阻塞是這些隊(duì)列不使用鎖,所有操作總是可以立即執(zhí)行,主要通過循環(huán)CAS實(shí)現(xiàn)并發(fā)安全,阻塞隊(duì)列是指這些隊(duì)列使用鎖和條件,很多操作都需要先獲取鎖或滿足特定條件,獲取不到鎖或等待條件時(shí),會(huì)等待(即阻塞),獲取到鎖或條件滿足再返回。

這些隊(duì)列迭代都不會(huì)拋出ConcurrentModificationException,都是弱一致的,后面就不單獨(dú)強(qiáng)調(diào)了。下面,我們來簡(jiǎn)要探討每類隊(duì)列的用途、用法和基本實(shí)現(xiàn)原理。

無鎖非阻塞并發(fā)隊(duì)列

有兩個(gè)無鎖非阻塞隊(duì)列:ConcurrentLinkedQueue和ConcurrentLinkedDeque,它們適用于多個(gè)線程并發(fā)使用一個(gè)隊(duì)列的場(chǎng)合,都是基于鏈表實(shí)現(xiàn)的,都沒有限制大小,是無界的,與

網(wǎng)友評(píng)論