本節(jié),我們來(lái)探討Java并發(fā)包中的各種隊(duì)列。Java并發(fā)包提供了豐富的隊(duì)列類(lèi),可以簡(jiǎn)單分為:
無(wú)鎖非阻塞并發(fā)隊(duì)列:ConcurrentLinkedQueue和ConcurrentLinkedDeque
普通阻塞隊(duì)列:基于數(shù)組的ArrayBlockingQueue,基于鏈表的LinkedBlockingQueue和LinkedBlockingDeque
優(yōu)先級(jí)阻塞隊(duì)列:PriorityBlockingQueue
延時(shí)阻塞隊(duì)列:DelayQueue
其他阻塞隊(duì)列:SynchronousQueue和LinkedTransferQueue
無(wú)鎖非阻塞是這些隊(duì)列不使用鎖,所有操作總是可以立即執(zhí)行,主要通過(guò)循環(huán)CAS實(shí)現(xiàn)并發(fā)安全,阻塞隊(duì)列是指這些隊(duì)列使用鎖和條件,很多操作都需要先獲取鎖或滿足特定條件,獲取不到鎖或等待條件時(shí),會(huì)等待(即阻塞),獲取到鎖或條件滿足再返回。
這些隊(duì)列迭代都不會(huì)拋出ConcurrentModificationException,都是弱一致的,后面就不單獨(dú)強(qiáng)調(diào)了。下面,我們來(lái)簡(jiǎn)要探討每類(lèi)隊(duì)列的用途、用法和基本實(shí)現(xiàn)原理。
無(wú)鎖非阻塞并發(fā)隊(duì)列
有兩個(gè)無(wú)鎖非阻塞隊(duì)列:ConcurrentLinkedQueue和ConcurrentLinkedDeque,它們適用于多個(gè)線程并發(fā)使用一個(gè)隊(duì)列的場(chǎng)合,都是基于鏈表實(shí)現(xiàn)的,都沒(méi)有限制大小,是無(wú)界的,與
延伸閱讀
學(xué)習(xí)是年輕人改變自己的最好方式