本節(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)的,都沒有限制大小,是無界的,與
延伸閱讀
學習是年輕人改變自己的最好方式