[Java并發(fā)編程] 并發(fā)容器框架的簡單介紹

三軍可奪帥也定庵,匹夫不可奪志也衰粹±妫———《論語》

上一篇講到同步容器類的潛在問題钦无,可以通過兩個方法解決污淋。

  1. 可以通過客戶端加鎖解決陨倡。
  2. 可以使用并發(fā)容器類來解決問題。

客戶端加鎖的方法我們已經(jīng)知道田篇,所以替废,這一篇介紹一下并發(fā)容器類原理,看它是如何解決這些問題的泊柬。

下面看下并發(fā)容器的框架圖:


這里寫圖片描述

我們從上圖可以看到椎镣,它們分為五大類:Map, List, Set,Collection,Queue, 同步容器類都是從這五大基類繼承而來兽赁,它們都是線程安全的状答。

同步容器類實現(xiàn)線程安全性的方式是所有方法都持有一個鎖,并發(fā)容器則不同刀崖,這里主要講介紹幾個并發(fā)容器類來說明惊科。

ConcurrentHashMap

它并不是每個方法都在同一個鎖上實現(xiàn)同步使得每次只能有一個線程訪問容器。而是使用一種粒度更細的加鎖機制來實現(xiàn)更大程度的共享亮钦,這種機制稱為分段鎖馆截。在這種機制中,任意數(shù)量的讀取線程可以并發(fā)訪問 Map,執(zhí)行讀取操作的線程和執(zhí)行寫入操作的線程可以并發(fā)的訪問 Map蜂莉,并且一定數(shù)量的寫入線程可以并發(fā)的修改 Map蜡娶。所以在并發(fā)環(huán)境中,它實現(xiàn)更高的吞吐量映穗,在單線程環(huán)境中損失非常小的性能窖张。

由于 ConcurrentHashMap 不能加鎖來執(zhí)行獨占訪問,因此我們無法通過客戶端加鎖來創(chuàng)建新的原子操作蚁滋。然而宿接,一些常見的復(fù)合操作已經(jīng)實現(xiàn)了赘淮。包括如下接口:

這里寫圖片描述

當你需要這些額外的原子操作時,那么你可以考慮使用它睦霎。

CopyOnWriteArrayList

寫時復(fù)制容器拥知,可以理解為向容器添加一個元素時,先將當前的容器進行復(fù)制碎赢,生成一個新的容器,然后在向新的容器添加元素速梗,之后再將原容器的引用指向新的容器肮塞。

好處是,對 CopyOnWrite 容器可以不用加鎖進行并發(fā)的讀姻锁,因為此時不會添加任何元素枕赵。CopyOnWrite 是一種讀寫分離的思想,讀操作和寫操作的是不同的容器位隶。

它可以用于替代同步 List拷窜,但是每次在修改容器時都會復(fù)制底層數(shù)組。比如 add(),set() 等操作時涧黄,需要一定的開銷篮昧,特別是當容器規(guī)模較大時,它比較適用于讀多寫少的并發(fā)場景笋妥。

ArrayBlockingQueue

它是數(shù)組實現(xiàn)的線程安全的有界的阻塞隊列(FIFO)懊昨,支持多任務(wù)并發(fā)操作。它內(nèi)部通過互斥鎖保護競爭資源春宣,實現(xiàn)了多線程對競爭資源的互斥訪問酵颁;有界是指數(shù)組的長度是固定的;阻塞是指當競爭資源已經(jīng)某線程獲取時月帝,其他要獲取該資源的線程需要阻塞等待躏惋。

它的核心函數(shù)都是通過可重入鎖 ReentrantLock 來確保線程同步的。包括 put(),offer(),take(),poll() 等嚷辅。同時簿姨,還包含兩個條件 Condition(notEmpty, notFull),加入元素是潦蝇,如果隊列已滿則必須等待款熬;取出元素時,如果隊列為空則必須等待攘乒。

總結(jié)

并發(fā)容器是針對多個線程并發(fā)訪問設(shè)計的贤牛,通過并發(fā)容器來代替同步容器,可以極大的提高伸縮性并降低風險则酝。并發(fā)容器提供的迭代不會拋出 ConcurrentModificationException殉簸,因此在迭代過程中不需要對容器加鎖闰集。另外,并發(fā)容器只能保證數(shù)據(jù)的最終一致性般卑,不能保證實時一致性武鲁。換句話說,容器被修改后的數(shù)據(jù)并不保證能夠?qū)崟r的反應(yīng)到迭代器的遍歷蝠检。

本文完結(jié)沐鼠,如果覺得有幫助,請關(guān)注我叹谁,謝謝饲梭!

參考

  1. 《Java并發(fā)編程實戰(zhàn)》
  2. http://www.cnblogs.com/leesf456/p/5428630.html
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市焰檩,隨后出現(xiàn)的幾起案子憔涉,更是在濱河造成了極大的恐慌,老刑警劉巖析苫,帶你破解...
    沈念sama閱讀 216,496評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兜叨,死亡現(xiàn)場離奇詭異,居然都是意外死亡衩侥,警方通過查閱死者的電腦和手機国旷,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,407評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來茫死,“玉大人议街,你說我怎么就攤上這事¤甸” “怎么了特漩?”我有些...
    開封第一講書人閱讀 162,632評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長骨杂。 經(jīng)常有香客問我涂身,道長,這世上最難降的妖魔是什么搓蚪? 我笑而不...
    開封第一講書人閱讀 58,180評論 1 292
  • 正文 為了忘掉前任蛤售,我火速辦了婚禮,結(jié)果婚禮上妒潭,老公的妹妹穿的比我還像新娘悴能。我一直安慰自己,他們只是感情好雳灾,可當我...
    茶點故事閱讀 67,198評論 6 388
  • 文/花漫 我一把揭開白布漠酿。 她就那樣靜靜地躺著,像睡著了一般谎亩。 火紅的嫁衣襯著肌膚如雪炒嘲。 梳的紋絲不亂的頭發(fā)上宇姚,一...
    開封第一講書人閱讀 51,165評論 1 299
  • 那天,我揣著相機與錄音夫凸,去河邊找鬼浑劳。 笑死,一個胖子當著我的面吹牛夭拌,可吹牛的內(nèi)容都是我干的魔熏。 我是一名探鬼主播,決...
    沈念sama閱讀 40,052評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼鸽扁,長吁一口氣:“原來是場噩夢啊……” “哼道逗!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起献烦,我...
    開封第一講書人閱讀 38,910評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎卖词,沒想到半個月后巩那,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,324評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡此蜈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,542評論 2 332
  • 正文 我和宋清朗相戀三年即横,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片裆赵。...
    茶點故事閱讀 39,711評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡东囚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出战授,到底是詐尸還是另有隱情页藻,我是刑警寧澤,帶...
    沈念sama閱讀 35,424評論 5 343
  • 正文 年R本政府宣布植兰,位于F島的核電站份帐,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏楣导。R本人自食惡果不足惜废境,卻給世界環(huán)境...
    茶點故事閱讀 41,017評論 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望筒繁。 院中可真熱鬧噩凹,春花似錦、人聲如沸毡咏。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,668評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽呕缭。三九已至幻赚,卻和暖如春禀忆,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背落恼。 一陣腳步聲響...
    開封第一講書人閱讀 32,823評論 1 269
  • 我被黑心中介騙來泰國打工箩退, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人佳谦。 一個月前我還...
    沈念sama閱讀 47,722評論 2 368
  • 正文 我出身青樓戴涝,卻偏偏與公主長得像,于是被迫代替她去往敵國和親钻蔑。 傳聞我的和親對象是個殘疾皇子啥刻,可洞房花燭夜當晚...
    茶點故事閱讀 44,611評論 2 353

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

  • 從三月份找實習(xí)到現(xiàn)在,面了一些公司咪笑,掛了不少可帽,但最終還是拿到小米、百度窗怒、阿里映跟、京東、新浪扬虚、CVTE努隙、樂視家的研發(fā)崗...
    時芥藍閱讀 42,240評論 11 349
  • layout: posttitle: 《Java并發(fā)編程的藝術(shù)》筆記categories: Javaexcerpt...
    xiaogmail閱讀 5,815評論 1 19
  • 有的時候,一件事情能讓人想起往昔的日子辜昵,勾起那埋藏在記憶深處的漣漪荸镊。譬如——拍蒜瓣,常讓我想起我的爺爺堪置。 爺爺是廚...
    江小馨閱讀 511評論 1 4
  • 昨天看到英才初三來我們學(xué)校操場訓(xùn)練突然心疼了一下躬存。 一年以前,是我們舀锨,那才是真正的我們。馮鑫雁竞,付文嬌钦椭,王悅,哦還有...
    如是_i閱讀 250評論 1 0
  • 整日三點一線碑诉,即使再不忙的崗位,也需要遵守朝九晚五的章程,如果能偶爾忙里偷閑格嗅,出去轉(zhuǎn)轉(zhuǎn),尤其是在工作時間粪摘,那種感覺...
    枯藤殘鴉閱讀 566評論 0 3