Queue并發(fā)

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è)方法沒用任何區(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)部沒實(shí)現(xiàn)讀寫分離,也就意味著生成和消費(fèi)不能完全并行,長(zhǎng)度是需要定義的,可以指定先進(jìn)先出或者先進(jìn)后出,也叫有界隊(duì)列,在很多場(chǎng)合非常適用適用。

LinkedBlockingQueue: 基于鏈表的阻塞隊(duì)列,同ArrayBlockingQueue類似,其內(nèi)部也維持著一個(gè)數(shù)據(jù)緩沖隊(duì)列(該隊(duì)列由一個(gè)鏈表構(gòu)成),LinkedBlockingQueue之所以能夠高效的處理并發(fā)數(shù)據(jù),是因?yàn)槠鋬?nèi)部實(shí)現(xiàn)采用了分離鎖(讀寫分離兩個(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è)沒有大小限制的隊(duì)列,應(yīng)用場(chǎng)景很多,比如對(duì)緩存超時(shí)的數(shù)據(jù)進(jìn)行移除、任務(wù)超時(shí)處理、空閑連接的關(guān)閉等等。

SynchronousQueue: 一種沒有緩沖的隊(duì)列,生產(chǎn)者產(chǎn)生的數(shù)據(jù)直接會(huì)被消費(fèi)者獲取并取消。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容