synchronize 鎖升級過程

偏向鎖

在大多數(shù)情況下,鎖不僅不存在多線程競爭矮湘,而且總是由同一線程多次獲得斟冕,因此為了減少同一線程獲取鎖(會涉及到一些CAS操作,耗時(shí))的代價(jià)而引入偏向鎖。

使用場景缅阳,一般是一個線程訪問同步塊磕蛇,優(yōu)點(diǎn)是加鎖解鎖不需要額外的 消耗

1、線程訪問同步代碼塊 判斷當(dāng)前鎖狀態(tài)十办,鎖標(biāo)志位01孤里,再判斷是否是偏向鎖 ,是否偏向鎖為1 則是偏向鎖橘洞;

2捌袜、是偏向鎖,再判斷對象頭中Markwork記錄的ThreadId是否是當(dāng)前線程炸枣;

????????如果是虏等,當(dāng)前線程直接獲取到偏向鎖弄唧,繼續(xù)執(zhí)行同步塊代碼;

? ? ? ? 如果不是霍衫,則通過CAS操作候引,嘗試將對象頭中Markwork中的ThreadID更新為自己的線程id,來獲取偏向鎖 敦跌,當(dāng)CAS操作成功澄干,線程拿到了偏向鎖,則繼續(xù)執(zhí)行同步塊代碼柠傍;當(dāng)CAS操作失敗麸俘,開始對原線程持有的偏向鎖撤銷,當(dāng)原持有偏向鎖 的線程到達(dá)安全點(diǎn)后惧笛,停止原持有偏向鎖的線程从媚;

3、原持有偏向鎖線程的活動狀態(tài)患整,如果已經(jīng)退出同步塊代碼拜效,則喚起新的線程來競爭偏向鎖,對象重新偏向各谚;如果是原持有偏向鎖線程沒有退出同步塊紧憾,則升級輕量級鎖;


輕量級鎖

由于出現(xiàn)鎖的競爭昌渤,會將偏向鎖升級為輕量級鎖

1赴穗、升級輕量級鎖 之前,線程會在線程棧中分配鎖記錄存儲空間愈涩;

2望抽、拷貝對象頭中Markwork的鎖信息封裝為LockRecord到線程棧的鎖記錄中加矛;

3履婉、通過CAS操作,將線程棧中的分配鎖記錄的指針地址更新到對象頭的Markwork中斟览,如果更新成功毁腿,獲取輕量級鎖;

4苛茂、如果CAS操作失敗已烤,則利用自旋來嘗試重新獲取輕量級鎖,自旋其實(shí)就是不斷的循環(huán)進(jìn)行CAS操作直到能成功替換妓羊,所以輕量級鎖又叫自旋鎖胯究;

5、lockrecord的作用:在這里實(shí)現(xiàn)了鎖重入躁绸,每當(dāng)同一個線程多次獲取同一個鎖時(shí)裕循,會在當(dāng)前棧幀中放入一個lockrecord臣嚣,但是重入是放入的lockrecord關(guān)于鎖信息的內(nèi)容為null,代表鎖重入剥哑。當(dāng)輕量級解鎖時(shí)硅则,每解鎖一次則從棧幀中彈出一個lockrecord,直到為0株婴;

6怎虫、當(dāng)自旋到一定次數(shù)之后,還是拿不到鎖困介,鎖再次升級大审,升級為重量級鎖。

重量級鎖

在重量級鎖中將LockRecord對象替換為了monitor對象的實(shí)現(xiàn)逻翁。主要通過monitorenter和monitorexit兩個指令來實(shí)現(xiàn)饥努。需要經(jīng)過系統(tǒng)調(diào)用,在并發(fā)低的情況下效率會低八回。


幾種鎖的優(yōu)缺點(diǎn)


總結(jié)

只有一個線程進(jìn)入臨界區(qū) -------偏向鎖

多個線程交替進(jìn)入臨界區(qū)--------輕量級鎖

多個線程同時(shí)進(jìn)入臨界區(qū)-------重量級鎖

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末酷愧,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缠诅,更是在濱河造成了極大的恐慌溶浴,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,406評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件管引,死亡現(xiàn)場離奇詭異士败,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)褥伴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,732評論 3 393
  • 文/潘曉璐 我一進(jìn)店門谅将,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人重慢,你說我怎么就攤上這事饥臂。” “怎么了似踱?”我有些...
    開封第一講書人閱讀 163,711評論 0 353
  • 文/不壞的土叔 我叫張陵隅熙,是天一觀的道長。 經(jīng)常有香客問我核芽,道長囚戚,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,380評論 1 293
  • 正文 為了忘掉前任轧简,我火速辦了婚禮驰坊,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘哮独。我一直安慰自己拳芙,他們只是感情好假勿,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,432評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著态鳖,像睡著了一般转培。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浆竭,一...
    開封第一講書人閱讀 51,301評論 1 301
  • 那天浸须,我揣著相機(jī)與錄音,去河邊找鬼邦泄。 笑死删窒,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的顺囊。 我是一名探鬼主播肌索,決...
    沈念sama閱讀 40,145評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼特碳!你這毒婦竟也來了诚亚?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,008評論 0 276
  • 序言:老撾萬榮一對情侶失蹤午乓,失蹤者是張志新(化名)和其女友劉穎站宗,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體益愈,經(jīng)...
    沈念sama閱讀 45,443評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡梢灭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,649評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了蒸其。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片敏释。...
    茶點(diǎn)故事閱讀 39,795評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖摸袁,靈堂內(nèi)的尸體忽然破棺而出钥顽,到底是詐尸還是另有隱情,我是刑警寧澤但惶,帶...
    沈念sama閱讀 35,501評論 5 345
  • 正文 年R本政府宣布耳鸯,位于F島的核電站湿蛔,受9級特大地震影響膀曾,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜阳啥,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,119評論 3 328
  • 文/蒙蒙 一添谊、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧察迟,春花似錦斩狱、人聲如沸耳高。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,731評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽泌枪。三九已至,卻和暖如春秕岛,著一層夾襖步出監(jiān)牢的瞬間碌燕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,865評論 1 269
  • 我被黑心中介騙來泰國打工继薛, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留修壕,地道東北人。 一個月前我還...
    沈念sama閱讀 47,899評論 2 370
  • 正文 我出身青樓遏考,卻偏偏與公主長得像慈鸠,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子灌具,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,724評論 2 354

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