在前一篇文章Java中的阻塞队列(BlockingQueue)中介绍了Java中的阻塞队列。从性能上我们能得出一个结论:数组优于链表,CAS优于锁。那么有没有一种队列,通过数组的方式实现,而且采用无锁的结构?嗯,那就是Disruptor,而且比想象中更为强大。

1. 无处不在的锁

Java中的阻塞队列采用锁来实现对临界区资源的同步访问,保证操作的线程安全。
在上一篇文章中我们知道ArrayBlockingQueue通过ReentrantLock以及它的两个condition来控制并发:

final ReentrantLock lock;private final Condition notEmpty;private final Condition notFull;

lock = new ReentrantLock(fair);
notEmpty = lock.newCo