synchronized 實現死鎖

2021-09-24 04:43:24 字數 475 閱讀 1653

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能夠實現可見...