【面試普通人VS高手系列】什么叫做阻塞隊列的有界和無界


昨天一個3年Java經驗的小伙伴私信我,他說現在面試怎么這么難啊!
我只是面試一個業務開發,他們竟然問我: 什么叫阻塞隊列的有界和無界。現在面試也太卷了吧!
如果你也遇到過類似問題,那我們來看看普通人和高手的回答吧!

普通人

有界隊列就是說隊列中的元素個數是有限制的,而無界對接表示隊列中的元素個數沒有限制! 嗯!!!

高手

  1. 阻塞隊列,是一種特殊的隊列,它在普通隊列的基礎上提供了兩個附加功能 image-20220313201420205

    1. 當隊列為空的時候,獲取隊列中元素的消費者線程會被阻塞,同時喚醒生產者線程。
    2. 當隊列滿了的時候,向隊列中添加元素的生產者線程被阻塞,同時喚醒消費者線程。
  2. 其中,阻塞隊列中能夠容納的元素個數,通常情況下是有界的,比如我們實例化一個ArrayBlockingList,可以在構造方法中傳入一個整形的數字,表示這個基於數組的阻塞隊列中能夠容納的元素個數。這種就是有界隊列。

  3. 而無界隊列,就是沒有設置固定大小的隊列,不過它並不是像我們理解的那種元素沒有任何限制,而是它的元素存儲量很大,像LinkedBlockingQueue,它的默認隊列長度是Integer.Max_Value,所以我們感知不到它的長度限制。

  4. 無界隊列存在比較大的潛在風險,如果在並發量較大的情況下,線程池中可以幾乎無限制的添加任務,容易導致內存溢出的問題!

以上就是我對這個問題的理解!

總結

阻塞隊列在生產者消費者模型的場景中使用頻率比較高,比較典型的就是在線程池中,通過阻塞隊列來實現線程任務的生產和消費功能。

基於阻塞隊列實現的生產者消費者模型比較適合用在異步化性能提升的場景,以及做並發流量緩沖類的場景中!

在很多開源中間件中都可以看到這種模型的使用,比如在Zookeeper源碼中就大量用到了阻塞隊列實現的生產者消費者模型。

OK,本期的普通人VS高手面試系列就到這里結束了,喜歡的朋友記得點贊收藏,需要面試資料或者面試問題咨詢可以私信或評論區下方留言。

我是Mic,一個工作了14年的Java程序員,咱們下期再見。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM