java常用阻塞佇列

2021-09-12 03:33:27 字數 1082 閱讀 7125

blockingqueue

獲取元素的時候等待佇列裡有元素,否則阻塞 

儲存元素的時候等待佇列裡有空間,否則阻塞 

用來簡化生產者消費者在多執行緒環境下的開發 

arrayblockingqueue

fifo、陣列實現 

有界阻塞佇列,一旦指定了佇列的長度,則佇列的大小不能被改變 

在生產者消費者例子中,如果生產者生產實體放入佇列超過了佇列的長度,則在offer(或者put,add)的時候會被阻塞,直到佇列的實體數量< 佇列的初始size為止。不過可以設定超時時間,超時後佇列還未空出位置,則offer失敗。 

如果消費者發現佇列裡沒有可被消費的實體時也會被阻塞,直到有實體被生產出來放入佇列位置,不過可以設定等待的超時時間,超過時間後會返回null 

linkedblockingqueue

fifo、node鍊錶結構 

可以通過構造方法設定capacity來使得阻塞佇列是有界的,也可以不設定,則為無界佇列 

其他功能類似arrayblockingqueue 

priorityblockingqueue

無界限佇列,相當於priorityqueue + blockingqueue 

插入的物件必須是可比較的,或者通過構造方法實現插入物件的比較器comparator<? super e> 

佇列裡的元素按comparator<? super e> comparator比較結果排序,priorityblockingqueue可以用來處理一些有優先順序的事物。比如簡訊傳送優先順序佇列,佇列裡已經有某企業的100000條簡訊,這時候又來了乙個100條緊急簡訊,優先級別比較高,可以通過priorityblockingqueue來輕鬆實現這樣的功能。這樣這個100條可以被優先傳送 

synchronousqueue

無內部容量的阻塞佇列,put必須等待take,同樣take必須等待put。比較適合兩個執行緒間的資料傳遞。非同步轉同步的場景不太適用,因為對於非同步執行緒來說在處理完事務後進行put,但是必須等待put的值被取走。 

java阻塞佇列

1.介紹 乙個支援兩個附加操作的佇列,兩個附加的操作支援阻塞的插入和移除操作。在阻塞佇列不可用時,兩個附加操作提供了4種處理方式 丟擲異常 返回特殊值 一直阻塞和超時退出。jdk7提供了7個阻塞佇列 1.arrayblockingqueue 陣列結構組成的有界阻塞佇列 預設情況下不保證執行緒公平的訪...

java中的阻塞佇列

一 阻塞佇列 blockingqueue 是乙個支援兩個附加操作的佇列。這兩個附加的操作支援阻塞的插入和移除方法。1 支援阻塞的插入方法 意思是當佇列滿時,佇列會阻塞插入元素的執行緒,直到佇列不滿。2 支援阻塞的移除方法 意思是在隊列為空時,獲取元素的執行緒會等待佇列變為非空。阻塞佇列常用於生產者和...

java 阻塞佇列自定義實現

自定義阻塞佇列 思路 阻塞佇列有這樣乙個特點,當佇列中沒有值得時候,這是只允許值得插入,當佇列中有值得時候,這時候允許佇列的插入,同時也允許佇列中元素的移除,但是當佇列中沒有值得時候,這時候就不允許佇列的移除了,而是等待其他執行緒插入新的元素 public class blockingqueue 如...