synchronized首先明確鎖的是物件而不是方法**,如果乙個物件有兩個方法,兩個執行緒分別呼叫其中乙個方法,如果鎖傳入的引數為 同一物件與不同物件,執行緒執行結果是不一樣的
死鎖**如下
package com.hanshow.wise.portal.center.controller.common;
public class test11 }
class mythreadaa implements runnable
@override
public void run()
} catch (interruptedexception e)
}} else
} catch (interruptedexception e) }}
} }class person
public void sleep()
}
利用synchronized關鍵字了解死鎖
博主個人 package com.zhengling.work public class deadlock catch interruptedexception e p2.start o2物件鎖已經被p2執行緒拿走 沒有被歸還 p2接著去拿o1物件鎖,o1物件鎖線程p1一直未歸還 所以就出現了死鎖 ...
synchronized實現原理
jvm規範規定jvm基於進入和退出monitor物件來實現方法同步和 塊同步,但兩者的實現細節不一樣。塊同步是使用monitorenter和monitorexit指令實現,而方法同步是使用另外一種方式實現的,細節在jvm規範裡並沒有詳細說明,但是方法的同步同樣可以使用這兩個指令來實現。monitor...
synchronized實現可見性
jmm關於synchronized的兩條規定 1 執行緒解鎖前,必須把共享變數的最新值重新整理到主記憶體中 2 執行緒加鎖時,將清空工作記憶體中共享變數的值,從而使用共享變數時需要從主記憶體中重新獲取最新的值 注意 加鎖與解鎖需要是同一把鎖 通過以上兩點,可以看到synchronized能夠實現可見...