Java 阻塞隊列總結(jié)

1.常用的阻塞隊列有哪些又活?

ArrayBlockingQueue佃却、LinkedBlockingQueue、DelayQueue萎攒、SynchronousQueue 、PriorityQueue等

2.它們各自的區(qū)別是什么矛绘?

常見的阻塞隊列 數(shù)據(jù)結(jié)構(gòu) 是否有界 線程安全 使用場景 如何阻塞
ArrayBlockingQueue 數(shù)組 有界 使用ReentrantLock保證出入隊線程安全 一般用于生產(chǎn)數(shù)據(jù)固定的場景 1.當(dāng)隊列為空耍休,take操作會阻塞;poll操作加上超時時間也會阻塞蔑歌,直到超時后返回null 2.當(dāng)隊列滿的時候羹应,put操作會阻塞;offer操作加上超時時間也會阻塞次屠,直到超時后返回false
LinkedBlockingQueue 鏈表 無界 使用ReentrantLock分別作為讀寫鎖保證出入隊線程安全 適合對生產(chǎn)的數(shù)據(jù)大小不定(時高時低)园匹,數(shù)據(jù)量較大的場景 與 ArrayBlockingQueue 的阻塞原理相似
PriorityBlockingQueue 二叉堆 無界 使用ReentrantLock保證出入隊線程安全 排序阻塞操作 隊列是無界的,所以添加元素不會阻塞劫灶。只有當(dāng)隊列為空的時候裸违,take操作會阻塞;poll操作加上超時時間也會阻塞本昏,直到超時后返回null
DelayQueue 二叉堆 無界 使用ReentrantLock保證出入隊線程安全 延遲阻塞操作 與 PriorityBlockingQueue 的阻塞原理相似
SynchronousQueue 隊列或堆棧 無容量概念 使用CAS保證出入隊線程安全 CachedThreadPool線程池使用 當(dāng)前操作與隊列或堆棧中第一個數(shù)據(jù)操作一樣的話就會一直阻塞供汛,只有當(dāng)隊列中兩個操作是互補的狀態(tài)才會出隊

3.無鎖隊列的原理是什么?
SynchronousQueue 隊列是無鎖隊列涌穆,其內(nèi)部是使用CAS自旋操作保證線程安全

4.延遲阻塞隊列的原理是什么怔昨?
DelayQueue 底層使用了 PriorityQueue 優(yōu)先級隊列,而 PriorityQueue 實際上一個二叉堆結(jié)構(gòu)宿稀,通過比較堆內(nèi)元素過期時間趁舀,將堆內(nèi)最快過期的元素放在堆頭,以保證每次獲取的元素是最二叉堆中最快過期的元素

5.String變量可以放在 DelayQueue 隊列里面嗎祝沸?
DelayQueue 要求元素必須實現(xiàn) Delayed 接口矮烹,也就是說 DelayQueue 的元素必須是 Delayed 的子類。而String類并沒有實現(xiàn) Delayed 接口罩锐,所以String 變量是不能放在 DelayQueue 隊列里奉狈。

6.如何查看 SynchronousQueue 隊列的大小涩惑?
實際上 SynchronousQueue 本身是沒有容量的仁期,所以也無法查看其容量的大小,其內(nèi)部的 size 方法都是寫死的返回 0

7.如果超出 LinkedBlockingQueue 的容量值,又會出現(xiàn)什么情況蟀拷?
如果有限定 LinkedBlockingQueue 的容量碰纬,當(dāng)達到容量值的時候put操作和offer操作加上超時時間會阻塞;如果沒有限定容量的話问芬,就可認為容量是無限大,直到耗盡機器的資源寿桨,發(fā)生OOM此衅。所以我們在使用 LinkedBlockingQueue 的時候最好能夠設(shè)置容量,防止耗盡內(nèi)容亭螟!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挡鞍,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子预烙,更是在濱河造成了極大的恐慌墨微,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扁掸,死亡現(xiàn)場離奇詭異翘县,居然都是意外死亡,警方通過查閱死者的電腦和手機谴分,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門锈麸,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人牺蹄,你說我怎么就攤上這事忘伞。” “怎么了沙兰?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵氓奈,是天一觀的道長。 經(jīng)常有香客問我鼎天,道長舀奶,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任训措,我火速辦了婚禮伪节,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘绩鸣。我一直安慰自己怀大,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布呀闻。 她就那樣靜靜地躺著化借,像睡著了一般。 火紅的嫁衣襯著肌膚如雪捡多。 梳的紋絲不亂的頭發(fā)上蓖康,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天铐炫,我揣著相機與錄音,去河邊找鬼蒜焊。 笑死倒信,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泳梆。 我是一名探鬼主播鳖悠,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼优妙!你這毒婦竟也來了乘综?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤套硼,失蹤者是張志新(化名)和其女友劉穎卡辰,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體邪意,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡九妈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了抄罕。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片允蚣。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖呆贿,靈堂內(nèi)的尸體忽然破棺而出嚷兔,到底是詐尸還是另有隱情,我是刑警寧澤做入,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布冒晰,位于F島的核電站,受9級特大地震影響竟块,放射性物質(zhì)發(fā)生泄漏壶运。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一浪秘、第九天 我趴在偏房一處隱蔽的房頂上張望蒋情。 院中可真熱鬧,春花似錦耸携、人聲如沸棵癣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽狈谊。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間河劝,已是汗流浹背壁榕。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留赎瞎,地道東北人牌里。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓,卻偏偏與公主長得像煎娇,于是被迫代替她去往敵國和親二庵。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,916評論 2 344