【多線程】——ArrayBlockingQueue跟LinkedBlockingQueue相比較

來源:互聯網
上載者:User
共同性:
    首先介紹下這兩個隊列的共同特性,要知道Blocking這個詞的意思,這個詞為阻塞,所以顧名思義,這兩個隊列為阻塞隊列,但是同樣的也可一
把他們看成資料共用的通道。為什麼這樣說呢。
有下面一個情境:          當服務線程(服務線程指的事不斷擷取隊列中的訊息,進行處理的線程),處理完隊列中所有的訊息後,如何知道下一條訊息何時到來呢。          BlockingQueue就很好的解決了這個問題,會讓服務線程在隊列為空白的時候進行等待,有新的訊息進入隊列 後,自動將線程喚醒。這個操作是通
過Condition機制配合鎖進行通知和等待的。具體內容可以下去做功課哦。

不同性:


實現方式不同:

     ArrayBlockingQueue:基於數組實現的,是有界的,必須制定隊列的大小。
     
     LinkedBlockingQueue:基於鏈表實現的,是無界的,但是也可以指定隊列的大小,預設Integer.MAX_VALUE。



隊列中鎖的實現不同:

 
      這兩個隊列中用到的鎖都是顯示鎖,在通知和等待機制用的都是 await和signal。


      ArrayBlockingQueue:生產者和消費者用到的事同一把鎖


      LinkedBlockingQueue:生產者用到的鎖:putLock,消費者用到的鎖:takeLock。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.