java隊列

非阻塞隊列

ConcurrentLinkedQueue

ConcurrentLinkedQueue非阻塞無界隊列
ConcurrentLinkedQueue使用鏈表作為數(shù)據(jù)結(jié)構(gòu)示惊,它采用無鎖cas操作,可以任務(wù)是高并發(fā)環(huán)境下性能最好的隊列
ConcurrentLinkedQueue是非阻塞線程安全隊列,無界福贞,故不太適合做生產(chǎn)者消費者模式

阻塞隊列

BlockingQueue 阻塞隊列公共接口

重要方法

  • offer(anObject):表示如果可能的話, 將anObject加到BlockingQueue里,即如果BlockingQueue可以容納, 則返回true, 否則返回false.(本方法不阻塞當前執(zhí)行方法的線程)

  • offer(E o, long timeout, TimeUnit unit), 可以設(shè)定等待的時間况鸣,如果在指定的時間內(nèi)叉弦,還不能往隊列中加入BlockingQueue忙厌,則返回失敗

  • put(anObject): 把anObject加到BlockingQueue里, 如果BlockQueue沒有空間, 則調(diào)用此方法的線程被阻斷直到BlockingQueue里面有空間再繼續(xù)

  • poll(long timeout, TimeUnit unit):從BlockingQueue取出一個隊首的對象铃岔,如果在指定時間內(nèi)涉馁,隊列一旦有數(shù)據(jù)可取门岔,則立即返回隊列中的數(shù)據(jù)。否則知道時間超時還沒有數(shù)據(jù)可取烤送,返回失敗

  • take(): 取走BlockingQueue里排在首位的對象,若BlockingQueue為空,阻斷進入等待狀態(tài)直到BlockingQueue有新的數(shù)據(jù)被加入

  • drainTo():一次性從BlockingQueue獲取所有可用的數(shù)據(jù)對象(還可以指定獲取數(shù)據(jù)的個數(shù))寒随,通過該方法,可以提升獲取數(shù)據(jù)效率帮坚;不需要多次分批加鎖或釋放鎖

什么是無界隊列妻往?指的是沒有設(shè)置固定大小的隊列。這些隊列的特點是可以直接入列试和,直到溢出讯泣。當然現(xiàn)實幾乎不會有到這么大的容量(超過 Integer.MAX_VALUE),所以從使用者的體驗上阅悍,就相當于 “無界”好渠。比如沒有設(shè)定固定大小的 LinkedBlockingQueue

ArrayBlockingQueue 數(shù)組實現(xiàn)的有界阻塞隊列

在ArrayBlockingQueue內(nèi)部,維護了一個定長數(shù)組节视,以便緩存隊列中的數(shù)據(jù)對象拳锚,其內(nèi)部沒實現(xiàn)讀寫分離,也就意味著生產(chǎn)和消費不能完全并行寻行,長度是需要定義的霍掺,可以指定先進先出或者先進后出,也叫有界隊列,在很多場合非常適合使用


LinkedBlockingQueue:鏈表實現(xiàn)的可選阻塞隊列(指定容量有界抗楔,默認無界)

同ArrayBlockingQueue類似棋凳,其內(nèi)部也維持著一個數(shù)據(jù)緩沖隊列(該隊列由一個鏈表構(gòu)成),LinkedBlockingQueue之所以能夠高效的處理并發(fā)數(shù)據(jù)连躏,是因為其內(nèi)部實現(xiàn)采用分離鎖(讀寫分離兩個鎖)剩岳,從而實現(xiàn)生產(chǎn)者和消費者操作的完全并行運行



SynchronousQueue:不存儲元素的阻塞隊列

生產(chǎn)者產(chǎn)生的數(shù)據(jù)直接會被消費者獲取并消費

PriorityBlockingQueue 支持優(yōu)先級排序的無界阻塞隊列

優(yōu)先級的判斷通過構(gòu)造函數(shù)傳入的Compator對象來決定,也就是說傳入隊列的對象必須實現(xiàn)Comparable接口入热,在實現(xiàn)PriorityBlockingQueue時拍棕,內(nèi)部控制線程同步的鎖采用的是公平鎖,他也是一個無界的隊列

delayQueue:帶有延遲時間的Queue 優(yōu)先級隊列實現(xiàn)的無界阻塞隊列

其中的元素只有當其指定的延遲時間到了勺良,才能夠從隊列中獲取到該元素绰播。DelayQueue中的元素必須實現(xiàn)Delayed接口,DelayQueue是一個沒有大小限制的隊列尚困,應(yīng)用場景很多蠢箩,比如對緩存超時的數(shù)據(jù)進行移除、 任務(wù)超時處理事甜、空閑連接的關(guān)閉等等

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末谬泌,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子逻谦,更是在濱河造成了極大的恐慌掌实,老刑警劉巖,帶你破解...
    沈念sama閱讀 221,331評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件邦马,死亡現(xiàn)場離奇詭異贱鼻,居然都是意外死亡,警方通過查閱死者的電腦和手機滋将,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,372評論 3 398
  • 文/潘曉璐 我一進店門邻悬,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人随闽,你說我怎么就攤上這事拘悦。” “怎么了橱脸?”我有些...
    開封第一講書人閱讀 167,755評論 0 360
  • 文/不壞的土叔 我叫張陵础米,是天一觀的道長。 經(jīng)常有香客問我添诉,道長屁桑,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,528評論 1 296
  • 正文 為了忘掉前任栏赴,我火速辦了婚禮蘑斧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己竖瘾,他們只是感情好沟突,可當我...
    茶點故事閱讀 68,526評論 6 397
  • 文/花漫 我一把揭開白布韭畸。 她就那樣靜靜地躺著颂斜,像睡著了一般。 火紅的嫁衣襯著肌膚如雪江滨。 梳的紋絲不亂的頭發(fā)上庸论,一...
    開封第一講書人閱讀 52,166評論 1 308
  • 那天职辅,我揣著相機與錄音,去河邊找鬼聂示。 笑死域携,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的鱼喉。 我是一名探鬼主播秀鞭,決...
    沈念sama閱讀 40,768評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼扛禽!你這毒婦竟也來了锋边?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,664評論 0 276
  • 序言:老撾萬榮一對情侶失蹤旋圆,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后麸恍,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灵巧,經(jīng)...
    沈念sama閱讀 46,205評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,290評論 3 340
  • 正文 我和宋清朗相戀三年抹沪,在試婚紗的時候發(fā)現(xiàn)自己被綠了刻肄。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,435評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡融欧,死狀恐怖敏弃,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情噪馏,我是刑警寧澤麦到,帶...
    沈念sama閱讀 36,126評論 5 349
  • 正文 年R本政府宣布,位于F島的核電站欠肾,受9級特大地震影響瓶颠,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜刺桃,卻給世界環(huán)境...
    茶點故事閱讀 41,804評論 3 333
  • 文/蒙蒙 一粹淋、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦桃移、人聲如沸屋匕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,276評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽过吻。三九已至,卻和暖如春第步,著一層夾襖步出監(jiān)牢的瞬間疮装,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評論 1 272
  • 我被黑心中介騙來泰國打工粘都, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留廓推,地道東北人。 一個月前我還...
    沈念sama閱讀 48,818評論 3 376
  • 正文 我出身青樓翩隧,卻偏偏與公主長得像樊展,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子堆生,可洞房花燭夜當晚...
    茶點故事閱讀 45,442評論 2 359

推薦閱讀更多精彩內(nèi)容