在前一篇文章Java中的阻塞隊(duì)列(BlockingQueue)中介紹了Java中的阻塞隊(duì)列。從性能上我們能得出一個(gè)結(jié)論:數(shù)組優(yōu)于鏈表,CAS優(yōu)于鎖。那么有沒有一種隊(duì)列,通過數(shù)組的方式實(shí)現(xiàn),而且采用無鎖的結(jié)構(gòu)?嗯,那就是Disruptor,而且比想象中更為強(qiáng)大。

1. 無處不在的鎖

Java中的阻塞隊(duì)列采用鎖來實(shí)現(xiàn)對(duì)臨界區(qū)資源的同步訪問,保證操作的線程安全。
在上一篇文章中我們知道ArrayBlockingQueue通過ReentrantLock以及它的兩個(gè)condition來控制并發(fā):

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

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