開始說
分布式和多線程很重要,哈哈。至于多線程開發(fā)這一塊兒,應用自己沒任何問題? 可是問到了底層的技術實現(xiàn),當時尬了。故將自己這兩天對同步鎖的底層實現(xiàn)方式進行一下探秘。
javap 命令
這是我的是linux桌面系統(tǒng) ubuntu 16.04?
直接上命令
當然這里不得不提一下java命令與javac 命令
javac 用來編譯咱們寫的xxx.java 文件 java 用來執(zhí)行javac 編譯后的 xxx.class?

以上是 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中間件。