| 隊(duì)列名稱 | 是否可以控制隊(duì)列容量 | 底層數(shù)據(jù)結(jié)構(gòu) | 加鎖方式 | 特點(diǎn) |
|---|---|---|---|---|
| ArrayBlockingQueue | 可以 | 數(shù)組 | ReentrantLock | 1、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)有位置,直接把菜放到餐臺(tái),同時(shí)喚醒正在等待的服務(wù)員; 2、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)沒(méi)有位置,則等待; 3、服務(wù)員來(lái)取菜,發(fā)現(xiàn)有菜,則取菜,并喚醒正在等待的廚師; 4、服務(wù)員來(lái)取菜,發(fā)現(xiàn)沒(méi)有菜,則等待; |
| LinkedBlockingQueue | 可以 | 單向鏈表 | ReentrantLock | 1、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)有位置,直接把菜放到餐臺(tái),同時(shí)喚醒正在等待的服務(wù)員; 2、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)沒(méi)有位置,則等待; 3、服務(wù)員來(lái)取菜,發(fā)現(xiàn)有菜,則取菜,并喚醒正在等待的廚師; 4、服務(wù)員來(lái)取菜,發(fā)現(xiàn)沒(méi)有菜,則等待; |
| LinkedBlockingDeque | 可以 | 雙向鏈表 | ReentrantLock | 1、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)有位置,直接把菜放到餐臺(tái),同時(shí)喚醒正在等待的服務(wù)員; 2、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)沒(méi)有位置,則等待; 3、服務(wù)員來(lái)取菜,發(fā)現(xiàn)有菜,則取菜,并喚醒正在等待的廚師; 4、服務(wù)員來(lái)取菜,發(fā)現(xiàn)沒(méi)有菜,則等待; |
| LinkedTransferQueue | 不可以 | 單向鏈表 | ReentrantLock | 1、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)有位置,直接把菜放到餐臺(tái),同時(shí)喚醒正在等待的服務(wù)員; 2、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)沒(méi)有位置,則等待; 3、服務(wù)員來(lái)取菜,發(fā)現(xiàn)有菜,則取菜,并喚醒正在等待的廚師; 4、服務(wù)員來(lái)取菜,發(fā)現(xiàn)沒(méi)有菜,則等待; 5、廚師炒好菜,發(fā)現(xiàn)有服務(wù)員在等待,則直接把菜給服務(wù)員; |
| PriorityBlockingQueue | 不可以 | 堆 | ReentrantLock | 1、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)有位置,直接把菜按照一定順序放到餐臺(tái),同時(shí)喚醒正在等待的服務(wù)員; 2、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)沒(méi)有位置,則等待; 3、服務(wù)員來(lái)取菜,發(fā)現(xiàn)有菜,則取菜,并喚醒正在等待的廚師; 4、服務(wù)員來(lái)取菜,發(fā)現(xiàn)沒(méi)有菜,則等待; |
| DelayQueue | 不可以 | 堆 | ReentrantLock | 1、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)有位置,直接把菜按照一定順序放到餐臺(tái),同時(shí)喚醒正在等待的服務(wù)員; 2、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)沒(méi)有位置,則等待; 3、服務(wù)員來(lái)取菜,發(fā)現(xiàn)有菜,則看下當(dāng)前菜是否到時(shí)間,到時(shí)間則取菜,并喚醒正在等待的廚師;沒(méi)到時(shí)間,自旋等待 4、服務(wù)員來(lái)取菜,發(fā)現(xiàn)沒(méi)有菜,則等待; |
| ConcurrentLinkedQueue | 不可以 | 單向鏈表 | cas | 1、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)有位置,直接把菜放到餐臺(tái); 2、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)沒(méi)有位置,則自旋; 3、服務(wù)員來(lái)取菜,發(fā)現(xiàn)有菜,則取菜; 4、服務(wù)員來(lái)取菜,發(fā)現(xiàn)沒(méi)有菜,則自旋; |
| ConcurrentLinkedDeque | 不可以 | 雙向鏈表 | cas | 1、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)有位置,直接把菜放到餐臺(tái); 2、廚師炒好菜,發(fā)現(xiàn)餐臺(tái)沒(méi)有位置,則自旋; 3、服務(wù)員來(lái)取菜,發(fā)現(xiàn)有菜,則取菜; 4、服務(wù)員來(lái)取菜,發(fā)現(xiàn)沒(méi)有菜,則自旋; |
| SynchronousQueue | 容量為0 | ReentrantLock | 1、廚師炒好菜,發(fā)現(xiàn)沒(méi)服務(wù)員,則等待服務(wù)員; 2、服務(wù)員來(lái)取菜,發(fā)現(xiàn)沒(méi)廚師,則等待廚師; |
大話隊(duì)列
?著作權(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
【社區(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)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
相關(guān)閱讀更多精彩內(nèi)容
- 要學(xué)習(xí)多線程一些基本的同步類也是不得不學(xué)習(xí)的,這里主要講一點(diǎn)基本的概念與使用。 阻塞隊(duì)列 阻塞隊(duì)列提供可阻塞的pu...
- 理論部分 用數(shù)組實(shí)現(xiàn)一個(gè)順序隊(duì)列。用數(shù)組實(shí)現(xiàn)一個(gè)循環(huán)隊(duì)列。用鏈表實(shí)現(xiàn)一個(gè)鏈?zhǔn)疥?duì)列。 順序隊(duì)列代碼實(shí)現(xiàn) 循環(huán)隊(duì)列代碼...
- 零、什么是Node.js? 引用Node.js官方網(wǎng)站的解釋如下: Node.js? is a JavaScrip...
- 3.2燕 在成都進(jìn)入大一的初期,我對(duì)中學(xué)時(shí)代的紅還是念念不忘的。由于我本身的性格,熱衷于參加各種校內(nèi)外的社團(tuán)活動(dòng)和...
- 我收到的關(guān)于Python Asyncio最常見(jiàn)的問(wèn)題是“它是什么,我能拿它來(lái)做什么”。這個(gè)問(wèn)題最多的回答可能是 “...