并發(fā)集合8-LinkedBlockingDeque源碼分析

前言

LinkedBlockingDeque是基于雙向鏈表的雙端有界阻塞隊列,使用非公平ReentrantLock實現(xiàn)線程安全,默認和最大長度都為Integer.MAX_VALUE;不允許null元素添加;實現(xiàn)骨架和ConcurrentLinkedDeque一樣,只是對并發(fā)控制的細節(jié)不同(volatile+循環(huán)CAS),雙端隊列可以用來實現(xiàn) "竊取算法" ,兩頭都可以操作隊列,相對于單端隊列可以減少一半的競爭。

定義


實現(xiàn)了BlockingDeque接口

重要字段

雙向鏈表節(jié)點


first和last節(jié)點在初始化時同時為null。

first和last節(jié)點狀態(tài)相對于ConcurrentLinkedDeque的比較簡單,因為此first和last節(jié)點都為普通變量,并不會因為頻繁的讀寫(相對于volatile變量)造成性能瓶頸。

count:元素數(shù)量計數(shù)
capacity:隊列最大容量

一個ReentrantLock鎖,兩個Condition。

構(gòu)造器

無參構(gòu)造器,默認容量Integer.MAX_VALUE



指定大于0的容量



集合構(gòu)造器,默認容量Integer.MAX_VALUE,加鎖,保證普通變量刷新到主內(nèi)存中,保證其線程可見性。

offerFirst方法(不響應(yīng)中斷)


offerLast方法(不響應(yīng)中斷)


putFirst方法(響應(yīng)中斷)


如果已經(jīng)滿了,則等待直到隊列不滿

putLast(響應(yīng)中斷)

offerFirst (響應(yīng)中斷超時)

offerLast(響應(yīng)中斷超時)

pollFirst(不響應(yīng)中斷)


pollLast(不響應(yīng)中斷)


remove方法




兩個方法分別遍歷隊列頭尾遍歷數(shù)組,時間復(fù)雜度為O(n)

contains方法


兩個方法分別遍歷隊列頭尾遍歷數(shù)組,時間復(fù)雜度為O(n)

size方法


時間復(fù)雜度為O(1)

iterator迭代器


迭代器都是弱一致性的,在操作隊列元素時需要加鎖,但是在迭代操作之間,隊列有可能被其他線程修改,當(dāng)hasNext返回true,但是下一次next和remove方法元素已經(jīng)被刪除了,此時將拋出NoSuchElementException異常。

方法列表


總結(jié)

LinkedBlockingDeque性能基本和LinkedBlockingQueue一致,只是雙端隊列和單端隊列的區(qū)別,一把鎖和兩把鎖的區(qū)別。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,641評論 19 139
  • 一、基本數(shù)據(jù)類型 注釋 單行注釋:// 區(qū)域注釋:/* */ 文檔注釋:/** */ 數(shù)值 對于byte類型而言...
    龍貓小爺閱讀 4,456評論 0 16
  • 前言 有界并發(fā)阻塞隊列,基于單向鏈表的實現(xiàn),按照FIFO對元素進行操作,默認和最大長度都為Integer.MAX_...
    zhanglbjames閱讀 1,114評論 1 1
  • 相關(guān)文章Java并發(fā)編程(一)線程定義、狀態(tài)和屬性 Java并發(fā)編程(二)同步Java并發(fā)編程(三)volatil...
    劉望舒閱讀 5,288評論 1 31
  • 世間的每一個人都是一個獨立的個體,我們有著自己的事情和想法,不管我們的人生是成功還是失敗都跟他人沒有關(guān)系,相反的別...
    阿貍G閱讀 571評論 0 2

友情鏈接更多精彩內(nèi)容