java中LinkedBlockingQueue與ArrayBlockingQueue的異同
相同:
1、LinkedBlockingQueue和ArrayBlockingQueue都實(shí)現(xiàn)了BlockingQueue接口;
2、LinkedBlockingQueue和ArrayBlockingQueue都是可阻塞的隊(duì)列
內(nèi)部都是使用ReentrantLock和Condition來(lái)保證生產(chǎn)和消費(fèi)的同步;
當(dāng)隊(duì)列為空,消費(fèi)者線程被阻塞;當(dāng)隊(duì)列裝滿,生產(chǎn)者線程被阻塞;


使用Condition的方法來(lái)同步和通信:await()和signal()
不同:
1、由上圖可以看出,他們的鎖機(jī)制不同
LinkedBlockingQueue中的鎖是分離的,生產(chǎn)者的鎖PutLock,消費(fèi)者的鎖takeLock
而ArrayBlockingQueue生產(chǎn)者和消費(fèi)者使用的是同一把鎖;
2、他們的底層實(shí)現(xiàn)機(jī)制也不同
LinkedBlockingQueue內(nèi)部維護(hù)的是一個(gè)鏈表結(jié)構(gòu)


在生產(chǎn)和消費(fèi)的時(shí)候,需要?jiǎng)?chuàng)建Node對(duì)象進(jìn)行插入或移除,大批量數(shù)據(jù)的系統(tǒng)中,其對(duì)于GC的壓力會(huì)比較大
而ArrayBlockingQueue內(nèi)部維護(hù)了一個(gè)數(shù)組

在生產(chǎn)和消費(fèi)的時(shí)候,是直接將枚舉對(duì)象插入或移除的,不會(huì)產(chǎn)生或銷(xiāo)毀任何額外的對(duì)象實(shí)例
3、構(gòu)造時(shí)候的區(qū)別
LinkedBlockingQueue有默認(rèn)的容量大小為:Integer.MAX_VALUE,當(dāng)然也可以傳入指定的容量大小

ArrayBlockingQueue在初始化的時(shí)候,必須傳入一個(gè)容量大小的值
看其提供的構(gòu)造方法就能知道

4、執(zhí)行clear()方法
LinkedBlockingQueue執(zhí)行clear方法時(shí),會(huì)加上兩把鎖

5、統(tǒng)計(jì)元素的個(gè)數(shù)
LinkedBlockingQueue中使用了一個(gè)AtomicInteger對(duì)象來(lái)統(tǒng)計(jì)元素的個(gè)數(shù)

ArrayBlockingQueue則使用int類(lèi)型來(lái)統(tǒng)計(jì)元素
相關(guān)文章
IDEA插件開(kāi)發(fā)之環(huán)境搭建過(guò)程圖文詳解
這篇文章主要介紹了IDEA插件開(kāi)發(fā)之環(huán)境搭建過(guò)程,本文通過(guò)圖文并茂實(shí)例代碼相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-05-05
spring cloud zuul 與 sentinel的結(jié)合使用操作
這篇文章主要介紹了spring cloud zuul 與 sentinel 的結(jié)合使用操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-06-06
spring-boot實(shí)現(xiàn)增加自定義filter(新)
本篇文章主要介紹了spring-boot實(shí)現(xiàn)增加自定義filter(新),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05
電腦上安裝多個(gè)JDK版本時(shí)該如何自由切換(詳細(xì)圖文)
我們?cè)趯W(xué)習(xí)的過(guò)程中經(jīng)常用到不同的jdk版本,那么如何在一臺(tái)電腦上同時(shí)安裝多個(gè)jdk版本并進(jìn)行切換呢,這篇文章主要給大家介紹了關(guān)于電腦上安裝多個(gè)JDK版本時(shí)該如何自由切換的相關(guān)資料,需要的朋友可以參考下2023-10-10
javaweb圖書(shū)商城設(shè)計(jì)之分類(lèi)模塊(2)
這篇文章主要為大家詳細(xì)介紹了javaweb圖書(shū)商城設(shè)計(jì)之分類(lèi)模塊的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11

