本节,我们来探讨Java并发包中的各种队列。Java并发包提供了丰富的队列类,可以简单分为:
无锁非阻塞并发队列:ConcurrentLinkedQueue和ConcurrentLinkedDeque
普通阻塞队列:基于数组的ArrayBlockingQueue,基于链表的LinkedBlockingQueue和LinkedBlockingDeque
优先级阻塞队列:PriorityBlockingQueue
延时阻塞队列:DelayQueue
其他阻塞队列:SynchronousQueue和LinkedTransferQueue
无锁非阻塞是这些队列不使用锁,所有操作总是可以立即执行,主要通过循环CAS实现并发安全,阻塞队列是指这些队列使用锁和条件,很多操作都需要先获取锁或满足特定条件,获取不到锁或等待条件时,会等待(即阻塞),获取到锁或条件满足再返回。
这些队列迭代都不会抛出ConcurrentModificationException,都是弱一致的,后面就不单独强调了。下面,我们来简要探讨每类队列的用途、用法和基本实现原理。
无锁非阻塞并发队列
有两个无锁非阻塞队列:ConcurrentLinkedQueue和ConcurrentLinkedDeque,它们适用于多个线程并发使用一个队列的场合,都是基于链表实现的,都没有限制大小,是无界的,与
延伸阅读
学习是年轻人改变自己的最好方式