java管程sychronized

通過sychronized給對(duì)象加鎖,每個(gè)對(duì)象在實(shí)例化后,會(huì)同時(shí)實(shí)例出一個(gè)ObjectMoniter头朱,同時(shí)對(duì)象有對(duì)象頭(markOop
)座享,在對(duì)象頭中會(huì)存有當(dāng)前鎖狀態(tài)信息婉商,包含線程id似忧。
ObjectMoniter
objectMonitor.hpp

ObjectMonitor() {
    _header       = NULL;
    _count        = 0;
    _waiters      = 0,
    _recursions   = 0;
    _object       = NULL;
    _owner        = NULL;
    _WaitSet      = NULL;
    _WaitSetLock  = 0 ;
    _Responsible  = NULL ;
    _succ         = NULL ;
    _cxq          = NULL ;
    FreeNext      = NULL ;
    _EntryList    = NULL ;
    _SpinFreq     = 0 ;
    _SpinClock    = 0 ;
    OwnerIsThread = 0 ;
    _previous_owner_tid = 0;
  }

_count:當(dāng)有對(duì)象獲取鎖,count+1丈秩,對(duì)象釋放鎖count-1
_EntryList:當(dāng)有對(duì)象嘗試獲取鎖盯捌,加入entryList中
_WaitSet:當(dāng)調(diào)用wait方法,進(jìn)入等待隊(duì)列
_owner:擁有鎖當(dāng)線程蘑秽,當(dāng)鎖釋放是饺著,count-1同時(shí)owner置為NULL
當(dāng)使用sychronized給對(duì)象加鎖時(shí),字節(jié)碼中是monitorenter給指定對(duì)象加鎖筷狼,給靜態(tài)方法加鎖時(shí)瓶籽,使用ACC_SYNCHRONIZED標(biāo)志給當(dāng)前對(duì)象加鎖。

public class SychronizedTest {

    private final Object lock = new Object();

    private volatile int count;

    public synchronized void method1() {
        count++;
    }

    public void method2() {
        synchronized (lock) {
            count++;
        }
    }
}

bytecode

public synchronized void method1();
    descriptor: ()V
    flags: ACC_PUBLIC, ACC_SYNCHRONIZED
    Code:
      stack=3, locals=1, args_size=1
         0: aload_0
         1: dup
         2: getfield      #4                  // Field count:I
         5: iconst_1
         6: iadd
         7: putfield      #4                  // Field count:I
        10: return
      LineNumberTable:
        line 14: 0
        line 15: 10
      LocalVariableTable:
        Start  Length  Slot  Name   Signature
            0      11     0  this   Lcom/chao/SychronizedTest;

public void method2();
    descriptor: ()V
    flags: ACC_PUBLIC
    Code:
      stack=3, locals=3, args_size=1
         0: aload_0
         1: getfield      #3                  // Field lock:Ljava/lang/Object;
         4: dup
         5: astore_1
         6: monitorenter
         7: aload_0
         8: dup
         9: getfield      #4                  // Field count:I
        12: iconst_1
        13: iadd
        14: putfield      #4                  // Field count:I
        17: aload_1
        18: monitorexit
        19: goto          27
        22: astore_2
        23: aload_1
        24: monitorexit
        25: aload_2
        26: athrow
        27: return
      Exception table:
         from    to  target type
             7    19    22   any
            22    25    22   any
      LineNumberTable:
........
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末埂材,一起剝皮案震驚了整個(gè)濱河市塑顺,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌俏险,老刑警劉巖严拒,帶你破解...
    沈念sama閱讀 211,561評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異竖独,居然都是意外死亡裤唠,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門莹痢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來种蘸,“玉大人,你說我怎么就攤上這事竞膳『讲t!?“怎么了?”我有些...
    開封第一講書人閱讀 157,162評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵坦辟,是天一觀的道長(zhǎng)刊侯。 經(jīng)常有香客問我,道長(zhǎng)锉走,這世上最難降的妖魔是什么滨彻? 我笑而不...
    開封第一講書人閱讀 56,470評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮挪蹭,結(jié)果婚禮上亭饵,老公的妹妹穿的比我還像新娘。我一直安慰自己梁厉,他們只是感情好冬骚,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般只冻。 火紅的嫁衣襯著肌膚如雪庇麦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評(píng)論 1 290
  • 那天喜德,我揣著相機(jī)與錄音山橄,去河邊找鬼。 笑死舍悯,一個(gè)胖子當(dāng)著我的面吹牛航棱,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播萌衬,決...
    沈念sama閱讀 38,951評(píng)論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼饮醇,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了秕豫?” 一聲冷哼從身側(cè)響起朴艰,我...
    開封第一講書人閱讀 37,712評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎混移,沒想到半個(gè)月后祠墅,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,166評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡歌径,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評(píng)論 2 327
  • 正文 我和宋清朗相戀三年毁嗦,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片回铛。...
    茶點(diǎn)故事閱讀 38,643評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡狗准,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出茵肃,到底是詐尸還是另有隱情驶俊,我是刑警寧澤,帶...
    沈念sama閱讀 34,306評(píng)論 4 330
  • 正文 年R本政府宣布免姿,位于F島的核電站,受9級(jí)特大地震影響榕酒,放射性物質(zhì)發(fā)生泄漏胚膊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評(píng)論 3 313
  • 文/蒙蒙 一想鹰、第九天 我趴在偏房一處隱蔽的房頂上張望紊婉。 院中可真熱鬧,春花似錦辑舷、人聲如沸喻犁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)肢础。三九已至还栓,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間传轰,已是汗流浹背剩盒。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評(píng)論 1 266
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留慨蛙,地道東北人辽聊。 一個(gè)月前我還...
    沈念sama閱讀 46,351評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像期贫,于是被迫代替她去往敵國(guó)和親跟匆。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評(píng)論 2 348

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

  • 一通砍、sychronized介紹 并發(fā)時(shí)玛臂,多個(gè)線程需要操作同一個(gè)資源,容易導(dǎo)致錯(cuò)誤數(shù)據(jù)的產(chǎn)生埠帕,為了解決這個(gè)問題垢揩,當(dāng)存...
    落地生涯閱讀 3,872評(píng)論 0 3
  • 給本文取這樣的標(biāo)題,我自己都笑了敛瓷,但是希望本文能幫助到一些人叁巨。本文從JVM的內(nèi)存結(jié)構(gòu)開始,然后介紹Java的對(duì)象結(jié)...
    宛丘之上兮閱讀 736評(píng)論 0 5
  • 理解Java對(duì)象頭與Monitor 實(shí)例變量:存放類的屬性數(shù)據(jù)信息呐籽,包括父類的屬性信息锋勺,如果是數(shù)組的實(shí)例部分還包括...
    CodeKing2017閱讀 10,106評(píng)論 3 50
  • 一、線程安全的概念 當(dāng)多個(gè)線程訪問一個(gè)對(duì)象時(shí)狡蝶,如果不考慮這些線程在運(yùn)行時(shí)環(huán)境下的調(diào)度和交替執(zhí)行庶橱,也不需要進(jìn)行...
    不是明天閱讀 2,189評(píng)論 0 3
  • 39、Synchronized的底層原理 ??synchronized是JAVA中解決并發(fā)編程中最常用的方法贪惹。??...
    從菜鳥到老菜鳥閱讀 1,083評(píng)論 0 1