synchronized線程鎖的底層實現(xiàn)機制,附加強大的javap命令

開始說

分布式和多線程很重要,哈哈。至于多線程開發(fā)這一塊兒,應用自己沒任何問題? 可是問到了底層的技術實現(xiàn),當時尬了。故將自己這兩天對同步鎖的底層實現(xiàn)方式進行一下探秘。

javap 命令

這是我的是linux桌面系統(tǒng) ubuntu 16.04?

直接上命令

當然這里不得不提一下java命令與javac 命令

javac 用來編譯咱們寫的xxx.java 文件 java 用來執(zhí)行javac 編譯后的 xxx.class?

javap 參數(shù)

以上是 javap 所有的option?

本次我們用到的是-c 也就是要反編譯我的代碼 哈哈 這是一種非常有效的方式 看看平時寫的代碼被反編譯后的樣子吧!

偽代碼如下

public classInstance {

protected? voidtest(){

//同步代碼塊

synchronized(this) {

doSomething();

}

}

private voiddoSomething(){

// write your service

}

}


以上代碼被反編譯后:


反編譯

我頂定義 test() 中定義的同步代碼塊 反編譯后 出現(xiàn)了monitor 分別有個enter 與 exit??

當前線程進來時有個標志 出去時去掉標志 這個標志唯一,誰有這個標志代表誰獲得了進入權限

繼續(xù)挖掘

第一個 aload_0 裝載第一個引用的對象

第二個 aload_0 守護monitor 進入montior 時 montior進入數(shù)為1,其他線程只能等待知道進入數(shù)為0

goto 正常完成了這個方法

第二個monitorexit 為了確保當前線程離開monitor

小結

結合操作系統(tǒng)的知識,synchonized機制與線程鎖的實現(xiàn)原理都是一樣的,底層都是通過類似于montiorLock的實現(xiàn)方式。

當然強大的Lock 的掌握以及網(wǎng)絡IO 的掌握將更有利于我們開發(fā)或者閱讀java中間件。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

  • 我曾經(jīng)寫過一篇文章叫《上帝是如何把宙斯擠下神壇的》,那么上帝在成為唯一的神以后是怎么處理來自凡人的祈禱和愿望呢?忙...
    和堅閱讀 1,025評論 11 7
  • 從三月份找實習到現(xiàn)在,面了一些公司,掛了不少,但最終還是拿到小米、百度、阿里、京東、新浪、CVTE、樂視家的研發(fā)崗...
    時芥藍閱讀 42,813評論 11 349
  • 轉自:http://blog.csdn.net/jackfrued/article/details/4492194...
    王帥199207閱讀 8,806評論 3 93
  • 兩彎似蹙非蹙罥煙眉,一雙似喜非喜含情目。態(tài)生兩靨之愁,嬌襲一身之病。淚光點點,嬌喘微微。閑靜時如姣花照水,行動處似...
    文抒苑閱讀 1,117評論 4 13
  • 溫暖的午后陽光鋪滿了整條馬路,她突然出現(xiàn)在視野中,只見她快速穿行在人行橫道上,金色的陽光披在她身上彷如仙女下凡,她...
    哎呀你妹的閱讀 208評論 0 0

友情鏈接更多精彩內容