在前一篇文章Java中的阻塞隊(duì)列(BlockingQueue)中介紹了Java中的阻塞隊(duì)列。從性能上我們能得出一個(gè)結(jié)論:數(shù)組優(yōu)于鏈表,CAS優(yōu)于鎖。那么有沒(méi)有一種隊(duì)列,通過(guò)數(shù)組的方式實(shí)現(xiàn),而且采用無(wú)鎖的結(jié)構(gòu)?嗯,那就是Disruptor,而且比想象中更為強(qiáng)大。
1. 無(wú)處不在的鎖
Java中的阻塞隊(duì)列采用鎖來(lái)實(shí)現(xiàn)對(duì)臨界區(qū)資源的同步訪問(wèn),保證操作的線程安全。
在上一篇文章中我們知道ArrayBlockingQueue通過(guò)ReentrantLock以及它的兩個(gè)condition來(lái)控制并發(fā):
final ReentrantLock lock;private final Condition notEmpty;private final Condition notFull; lock = new ReentrantLock(fair); notEmpty = lock.newCo