ConcurrentLinkedQueue
ConcurrentLinkedQueue:是一個(gè)使用于高并發(fā)場(chǎng)景下的隊(duì)列,通過(guò)無(wú)鎖的方式苟弛,實(shí)現(xiàn)了高并發(fā)狀態(tài)下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQueue阁将。它是一個(gè)基于鏈接節(jié)點(diǎn)的無(wú)界線程安全隊(duì)列膏秫。該隊(duì)列的元素遵循先進(jìn)先出的原則。頭是最先加入的做盅,尾是最近加入的缤削,該隊(duì)列不允許null元素窘哈。
ConcurrentLindedQueue重要方法:
add() 和 offer()都是加入元素的方法(在ConcurrentLinkedQueue中,這兩個(gè)方法沒(méi)用任何區(qū)別)
poll() 和 peek() 都是取頭元素節(jié)點(diǎn)亭敢,區(qū)別在于前者會(huì)刪除元素滚婉,后者不會(huì)。
BlockingQueue接口
ArrayBlockingQueue: 基于數(shù)組的阻塞隊(duì)列實(shí)現(xiàn)帅刀,在ArrayBlockingQueue內(nèi)部让腹,維護(hù)了一個(gè)定長(zhǎng)的數(shù)組,以便緩存隊(duì)列中的數(shù)據(jù)對(duì)象扣溺,其內(nèi)部沒(méi)實(shí)現(xiàn)讀寫(xiě)分離骇窍,也就意味著生成和消費(fèi)不能完全并行,長(zhǎng)度是需要定義的锥余,可以指定先進(jìn)先出或者先進(jìn)后出腹纳,也叫有界隊(duì)列,在很多場(chǎng)合非常適用適用哈恰。
LinkedBlockingQueue: 基于鏈表的阻塞隊(duì)列只估,同ArrayBlockingQueue類(lèi)似,其內(nèi)部也維持著一個(gè)數(shù)據(jù)緩沖隊(duì)列(該隊(duì)列由一個(gè)鏈表構(gòu)成)着绷,LinkedBlockingQueue之所以能夠高效的處理并發(fā)數(shù)據(jù)蛔钙,是因?yàn)槠鋬?nèi)部實(shí)現(xiàn)采用了分離鎖(讀寫(xiě)分離兩個(gè)鎖),從而實(shí)現(xiàn)生產(chǎn)者和消費(fèi)者操作的完全并行運(yùn)行荠医。他是一個(gè)無(wú)界隊(duì)列吁脱。
PriorityBlockingQueue:基于優(yōu)先級(jí)的阻塞隊(duì)列(優(yōu)先級(jí)的判斷通過(guò)構(gòu)造函數(shù)傳入的Compator對(duì)象來(lái)決定),也就是說(shuō)傳入隊(duì)列的對(duì)象必須實(shí)現(xiàn)Comparable接口)彬向,在實(shí)現(xiàn)PriorityBlockingQueue時(shí)兼贡,內(nèi)部控制線程同步的鎖采用的是公平鎖,他也是一個(gè)無(wú)界的隊(duì)列娃胆。
DelayQueue: 帶有延遲時(shí)間的Queue遍希,其中的元素只有當(dāng)其指定的延遲時(shí)間到了,才能夠從隊(duì)列中獲取到該元素里烦。DelayQueue中的元素必須實(shí)現(xiàn)Delayed接口凿蒜,DelayQueue是一個(gè)沒(méi)有大小限制的隊(duì)列,應(yīng)用場(chǎng)景很多胁黑,比如對(duì)緩存超時(shí)的數(shù)據(jù)進(jìn)行移除废封、任務(wù)超時(shí)處理、空閑連接的關(guān)閉等等丧蘸。
SynchronousQueue: 一種沒(méi)有緩沖的隊(duì)列漂洋,生產(chǎn)者產(chǎn)生的數(shù)據(jù)直接會(huì)被消費(fèi)者獲取并取消。