筆記:Java 內(nèi)存模型中的 happen-before簡(jiǎn)介

從JDK5開(kāi)始,JAVA使用新的JSR -133內(nèi)存模型猛蔽,這個(gè)模型提出了happens-before的概念,通過(guò)這個(gè)概念來(lái)闡述操作之間的內(nèi)存可見(jiàn)性。它的簡(jiǎn)單定義是:如果一個(gè)操作執(zhí)行的結(jié)果需要對(duì)另一個(gè)操作可見(jiàn)小泉,那么這兩個(gè)操作之間必須存在happens-before關(guān)系。這里提到的兩個(gè)操作既可以是在一個(gè)線程之內(nèi)冕杠,也可以是在不同線程之間微姊。

與程序員密切相關(guān)的happens-before規(guī)則如下:

1)程序順序規(guī)則:一個(gè)線程中的每個(gè)操作,happens- before 于該線程中的任意后續(xù)操作

2)監(jiān)視器鎖規(guī)則:對(duì)一個(gè)監(jiān)視器鎖的解鎖分预,happens- before 于隨后對(duì)這個(gè)監(jiān)視器鎖的加鎖

3)volatile變量規(guī)則:對(duì)一個(gè)volatile域的寫(xiě)兢交,happens- before 于任意后續(xù)對(duì)這個(gè)volatile域的讀

4)傳遞性:如果A happens- before B,且B happens- before C笼痹,那么A happens- before C

兩個(gè)操作之間具有happens-before關(guān)系配喳,并不意味著前一個(gè)操作必須要在后一個(gè)操作之前執(zhí)行。happens-before僅僅要求前一個(gè)操作執(zhí)行的結(jié)果對(duì)后一個(gè)操作可見(jiàn)凳干,且前一個(gè)操作按順序排在第二個(gè)操作之前晴裹。

對(duì)于java程序員來(lái)說(shuō),happens-before規(guī)則簡(jiǎn)單易懂救赐,它避免java程序員為了理解JMM提供的內(nèi)存可見(jiàn)性保證而去學(xué)習(xí)復(fù)雜的重排序規(guī)則以及這些規(guī)則的具體實(shí)現(xiàn)方法涧团。

happens-before關(guān)系本質(zhì)上和as-if-serial語(yǔ)義是一回事。as-if-serial語(yǔ)義保證單線程內(nèi)程序的執(zhí)行結(jié)果不被改變净响,happens-before關(guān)系保證正確同步的多線程程序的執(zhí)行結(jié)果不被改變少欺。as-if-serial語(yǔ)義給編寫(xiě)單線程的程序員創(chuàng)造了一個(gè)幻境:?jiǎn)尉€程程序是按程序的順序來(lái)執(zhí)行的。happens-before關(guān)系給編寫(xiě)正確同步的多線程程序員創(chuàng)造了一個(gè)幻境:正確同步的多線程程序是按happens-before指定的順序來(lái)執(zhí)行的馋贤。

as-if-serial語(yǔ)義和happens-before這么做的目的赞别,都是為了在不改變程序執(zhí)行結(jié)果的前提下,盡可能的提高程序執(zhí)行的并行度配乓。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末仿滔,一起剝皮案震驚了整個(gè)濱河市惠毁,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌崎页,老刑警劉巖鞠绰,帶你破解...
    沈念sama閱讀 219,039評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異飒焦,居然都是意外死亡蜈膨,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,426評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門(mén)牺荠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)翁巍,“玉大人,你說(shuō)我怎么就攤上這事休雌≡詈” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,417評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵杈曲,是天一觀的道長(zhǎng)驰凛。 經(jīng)常有香客問(wèn)我,道長(zhǎng)担扑,這世上最難降的妖魔是什么恰响? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,868評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮涌献,結(jié)果婚禮上渔隶,老公的妹妹穿的比我還像新娘。我一直安慰自己洁奈,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,892評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布绞灼。 她就那樣靜靜地躺著利术,像睡著了一般。 火紅的嫁衣襯著肌膚如雪低矮。 梳的紋絲不亂的頭發(fā)上印叁,一...
    開(kāi)封第一講書(shū)人閱讀 51,692評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音军掂,去河邊找鬼轮蜕。 笑死,一個(gè)胖子當(dāng)著我的面吹牛蝗锥,可吹牛的內(nèi)容都是我干的跃洛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,416評(píng)論 3 419
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼终议,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼汇竭!你這毒婦竟也來(lái)了葱蝗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 39,326評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤细燎,失蹤者是張志新(化名)和其女友劉穎两曼,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體玻驻,經(jīng)...
    沈念sama閱讀 45,782評(píng)論 1 316
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡悼凑,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,957評(píng)論 3 337
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了璧瞬。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片户辫。...
    茶點(diǎn)故事閱讀 40,102評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖彪蓬,靈堂內(nèi)的尸體忽然破棺而出寸莫,到底是詐尸還是另有隱情,我是刑警寧澤档冬,帶...
    沈念sama閱讀 35,790評(píng)論 5 346
  • 正文 年R本政府宣布膘茎,位于F島的核電站,受9級(jí)特大地震影響酷誓,放射性物質(zhì)發(fā)生泄漏披坏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,442評(píng)論 3 331
  • 文/蒙蒙 一盐数、第九天 我趴在偏房一處隱蔽的房頂上張望棒拂。 院中可真熱鬧,春花似錦玫氢、人聲如沸帚屉。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,996評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)攻旦。三九已至,卻和暖如春生逸,著一層夾襖步出監(jiān)牢的瞬間牢屋,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,113評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工槽袄, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留烙无,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,332評(píng)論 3 373
  • 正文 我出身青樓遍尺,卻偏偏與公主長(zhǎng)得像截酷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子乾戏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,044評(píng)論 2 355

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

  • 1.Java內(nèi)存模型的基礎(chǔ) ①并發(fā)編程模型的兩個(gè)關(guān)鍵問(wèn)題 線程之間如何通信合搅、線程之間如何同步 通信是指線程之間以何...
    加夕閱讀 742評(píng)論 0 1
  • Java的并發(fā)采用的是共享內(nèi)存模型(而非消息傳遞模型)多搀,線程之間共享程序的公共狀態(tài),線程之間通過(guò)寫(xiě)-讀內(nèi)存中的公共...
    阿斯蒂芬2閱讀 482評(píng)論 0 1
  • 并發(fā)系列的文章都是根據(jù)閱讀《Java 并發(fā)編程的藝術(shù)》這本書(shū)總結(jié)而來(lái)灾部,想更深入學(xué)習(xí)的同學(xué)可以自行購(gòu)買(mǎi)此書(shū)進(jìn)行學(xué)習(xí)康铭。...
    小之丶閱讀 1,052評(píng)論 1 7
  • 第2章 java并發(fā)機(jī)制的底層實(shí)現(xiàn)原理 Java中所使用的并發(fā)機(jī)制依賴于JVM的實(shí)現(xiàn)和CPU的指令。 2.1 vo...
    kennethan閱讀 1,432評(píng)論 0 2
  • 借鑒參考請(qǐng)關(guān)注微信公眾賬號(hào):偶優(yōu)社群 社群直播系統(tǒng)主要針對(duì)有內(nèi)容輸出的團(tuán)體或機(jī)構(gòu)使用赌髓,通過(guò)內(nèi)容引導(dǎo)消費(fèi)从藤,在結(jié)合層級(jí)...
    偶喲_85fa閱讀 952評(píng)論 0 2