本節(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í)是年輕人改變自己的最好方式-Java培訓(xùn),做最負(fù)責(zé)任的教育,學(xué)習(xí)改變命運(yùn),軟件學(xué)習(xí),再就業(yè),大學(xué)生如何就業(yè),幫大學(xué)生找到好工作,lphotoshop培訓(xùn),電腦培訓(xùn),電腦維修培訓(xùn),移動(dòng)軟件開(kāi)發(fā)培訓(xùn),網(wǎng)站設(shè)計(jì)培訓(xùn),網(wǎng)站建設(shè)培訓(xùn)學(xué)習(xí)是年輕人改變自己的最好方式