并發(fā)安全之一

并發(fā)程序正確地執(zhí)行担映,必須要保證原子性拧粪、可見性以及有序性。只要有一個沒有被保證邀桑,就有可能會導(dǎo)致程序運行不正確。

原子性:表示這個線程是不可分割的.中間沒辦法被其他線程打斷

可見性:表示這個線程執(zhí)行之后的結(jié)果能馬上被其他線程知道

有序性:表示這個線程的執(zhí)行是有順序的

volatile關(guān)鍵字來保證可見性科乎。

volatile關(guān)鍵字保證了操作的可見性壁畸,但是volatile不能保證對變量的操作是原子性

volatile能在一定程度上保證有序性

觀察加入volatile關(guān)鍵字和沒有加入volatile關(guān)鍵字時所生成的匯編代碼發(fā)現(xiàn),加入volatile關(guān)鍵字時茅茂,會多出一個lock前綴指令”

  lock前綴指令實際上相當(dāng)于一個內(nèi)存屏障(也成內(nèi)存柵欄)捏萍,內(nèi)存屏障會提供3個功能:

  1)它確保指令重排序時不會把其后面的指令排到內(nèi)存屏障之前的位置,也不會把前面的指令排到內(nèi)存屏障的后面空闲;即在執(zhí)行到內(nèi)存屏障這句指令時令杈,在它前面的操作已經(jīng)全部完成;

  2)它會強制將對緩存的修改操作立即寫入主存碴倾;

  3)如果是寫操作逗噩,它會導(dǎo)致其他CPU中對應(yīng)的緩存行無效

1)正如我所說,HashMap和ConcurrentHashMap之前的第一個顯著區(qū)別是后來是線程安全的影斑,可以在沒有外部同步的并發(fā)環(huán)境中使用给赞。雖然它沒有提供與使用Hashtable相同的同步級別,但它足以實現(xiàn)最實用的目的矫户。

2)你可以通過將它包裝在Collections.synchornizedMap(HashMap)上來使HashMap同步,它將返回一個幾乎等同于Hashtable的集合残邀,其中Map上的每個修改操作都被鎖定在Map對象上皆辽,而在ConcurrentHashMap的情況下,線程安全是通過將整個Map劃分為基于并發(fā)級別的不同分區(qū)并且僅鎖定特定部分而不是鎖定整個Map來實現(xiàn)的芥挣。

3)ConcurrentHashMap比多線程環(huán)境中的Synchronized?HashMap更具可伸縮性和性能驱闷,而在單線程環(huán)境中,HashMap和ConcurrentHashMap都提供了相當(dāng)?shù)男阅芸彰猓渲蠬ashMap稍微好一些空另。

ConcurrentHashMap 類中包含兩個靜態(tài)內(nèi)部類 HashEntry 和 Segment。HashEntry 用來封裝映射表的鍵 / 值對蹋砚;Segment 用來充當(dāng)鎖的角色扼菠,每個 Segment 對象守護(hù)整個散列映射表的若干個桶。每個桶是由若干個 HashEntry 對象鏈接起來的鏈表坝咐。一個 ConcurrentHashMap 實例中包含由若干個 Segment 對象組成的數(shù)組循榆。


ConcurrentHashMap:https://www.ibm.com/developerworks/cn/java/java-lo-concurrenthashmap/index.html

內(nèi)置鎖的重入:等于是一個線程獲取到一個鎖的時候,可以再次獲取同一個鎖,這個叫重進(jìn)入,當(dāng)然在退出的時候也是按順序解鎖

threadLocal:相當(dāng)于一個共享的全局變量,可以把線程相對應(yīng)的數(shù)據(jù)存進(jìn)去,然后再需要的時候取出來,

如何保證對象不可變


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市墨坚,隨后出現(xiàn)的幾起案子秧饮,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盗尸,死亡現(xiàn)場離奇詭異柑船,居然都是意外死亡,警方通過查閱死者的電腦和手機泼各,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門椎组,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人历恐,你說我怎么就攤上這事寸癌。” “怎么了弱贼?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵蒸苇,是天一觀的道長。 經(jīng)常有香客問我吮旅,道長溪烤,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任庇勃,我火速辦了婚禮檬嘀,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘责嚷。我一直安慰自己鸳兽,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布罕拂。 她就那樣靜靜地躺著揍异,像睡著了一般。 火紅的嫁衣襯著肌膚如雪爆班。 梳的紋絲不亂的頭發(fā)上衷掷,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音柿菩,去河邊找鬼戚嗅。 笑死,一個胖子當(dāng)著我的面吹牛枢舶,可吹牛的內(nèi)容都是我干的懦胞。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼祟辟,長吁一口氣:“原來是場噩夢啊……” “哼医瘫!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起旧困,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤醇份,失蹤者是張志新(化名)和其女友劉穎稼锅,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體僚纷,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡矩距,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了怖竭。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锥债。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖痊臭,靈堂內(nèi)的尸體忽然破棺而出哮肚,到底是詐尸還是另有隱情,我是刑警寧澤广匙,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布允趟,位于F島的核電站,受9級特大地震影響鸦致,放射性物質(zhì)發(fā)生泄漏潮剪。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一分唾、第九天 我趴在偏房一處隱蔽的房頂上張望抗碰。 院中可真熱鬧,春花似錦绽乔、人聲如沸弧蝇。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽捍壤。三九已至,卻和暖如春鞍爱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背专酗。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工睹逃, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人祷肯。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓沉填,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佑笋。 傳聞我的和親對象是個殘疾皇子翼闹,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

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

  • Java SE 基礎(chǔ): 封裝、繼承蒋纬、多態(tài) 封裝: 概念:就是把對象的屬性和操作(或服務(wù))結(jié)合為一個獨立的整體猎荠,并盡...
    Jayden_Cao閱讀 2,109評論 0 8
  • 第2章 java并發(fā)機制的底層實現(xiàn)原理 Java中所使用的并發(fā)機制依賴于JVM的實現(xiàn)和CPU的指令坚弱。 2.1 vo...
    kennethan閱讀 1,430評論 0 2
  • 簡介 ConcurrentHashMap 是 util.concurrent 包的重要成員。本文將結(jié)合 Java ...
    Kate_Blog閱讀 506評論 0 2
  • 九種基本數(shù)據(jù)類型的大小关摇,以及他們的封裝類荒叶。(1)九種基本數(shù)據(jù)類型和封裝類 (2)自動裝箱和自動拆箱 什么是自動裝箱...
    關(guān)瑋琳linSir閱讀 1,887評論 0 47
  • 線程池ThreadPoolExecutor corepoolsize:核心池的大小,默認(rèn)情況下输虱,在創(chuàng)建了線程池之后...
    irckwk1閱讀 725評論 0 0