常见的并发队列有2种:阻塞队列和非阻塞队列。阻塞队列使用锁实现,非阻塞队列使用CAS非阻塞算法实现。这2种队列都是线程安全的。
常见的阻塞队列有:LinkedBlockingQueue、ArrayBlockingQueue、PriorityBlockingQueue、SynchronousQueue
接下来我们分析一下阻塞队列的实现原理。阻塞队列是用锁来实现的,可以用一把锁,也就是入队和出队用同一把锁,也可以用两把锁,入队和出队用不同的锁。
常见的非阻塞队列有:ConcurrentLinkedQueue
非阻塞队列的实现原理可以参考之前的一篇文章,关键点就是CAS无锁算法和volatile关键字。ConcurrentLinkedQueue的数据结构是内部类中定义的Node,里面有2个变量:
volatile E item;
volatile Node<E> next;
对node的操作都是基于Unsafe类的。
网友评论