常見(jiàn)的并發(fā)隊(duì)列有2種:阻塞隊(duì)列和非阻塞隊(duì)列瞎暑。阻塞隊(duì)列使用鎖實(shí)現(xiàn),非阻塞隊(duì)列使用CAS非阻塞算法實(shí)現(xiàn)牌借。這2種隊(duì)列都是線程安全的。
常見(jiàn)的阻塞隊(duì)列有:LinkedBlockingQueue割按、ArrayBlockingQueue膨报、PriorityBlockingQueue、SynchronousQueue
接下來(lái)我們分析一下阻塞隊(duì)列的實(shí)現(xiàn)原理。阻塞隊(duì)列是用鎖來(lái)實(shí)現(xiàn)的现柠,可以用一把鎖院领,也就是入隊(duì)和出隊(duì)用同一把鎖,也可以用兩把鎖够吩,入隊(duì)和出隊(duì)用不同的鎖比然。
常見(jiàn)的非阻塞隊(duì)列有:ConcurrentLinkedQueue
非阻塞隊(duì)列的實(shí)現(xiàn)原理可以參考之前的一篇文章,關(guān)鍵點(diǎn)就是CAS無(wú)鎖算法和volatile關(guān)鍵字周循。ConcurrentLinkedQueue的數(shù)據(jù)結(jié)構(gòu)是內(nèi)部類中定義的Node强法,里面有2個(gè)變量:
volatile E item;
volatile Node<E> next;
對(duì)node的操作都是基于Unsafe類的。