synchronized隱式使用lock和unlock,保證了lock和unlock操做之間的代碼是原子的。多線程
八大happens-before規則中的兩條:app
二者結合,能夠看出鎖的釋放,獲取的內存語義能夠類比volatile變量的讀/寫的內存語義,鎖的釋放至關於volatile的寫,鎖的獲取至關於volatile的寫。因此鎖具有內存可見性。線程
在JVM規範中能夠看到JVM中synchronized的實現原理,JVM基於進入和退出Monitor來實現方法同步和代碼同步,實現細節不同,代碼同步使用monitorenter,monitorexit兩個指令實現,編譯器會在同步代碼開始處插入monitorenter指令,在結束處或者異常處插入monitorexit指令,==這兩個字節碼指令隱式使用lock和unlock操做==。內存