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

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

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

  • 優(yōu)先級阻塞隊列:PriorityBlockingQueue

  • 延時阻塞隊列:DelayQueue

  • 其他阻塞隊列:SynchronousQueue和LinkedTransferQueue

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

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

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

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

延伸閱讀

學習是年輕人改變自己的最好方式-Java培訓,做最負責任的教育,學習改變命運,軟件學習,再就業(yè),大學生如何就業(yè),幫大學生找到好工作,lphotoshop培訓,電腦培訓,電腦維修培訓,移動軟件開發(fā)培訓,網(wǎng)站設計培訓,網(wǎng)站建設培訓學習是年輕人改變自己的最好方式