1:對於普通同步方法,鎖的是當前例項的物件。
意思是
class a
}
a a = new a();
a a1 = new a();
a.test();
這個時候鎖住的是a.然而a1並不會被鎖住。
2:對於靜態同步方法,鎖的則是當前類的class物件。
意思是
class a
}
a a = new a();
a a1 = new a();
a.test();
這個時候鎖住的是整個a的class,a1也被鎖住了。
3:對於同步方法塊,鎖住的是synchonized括號內配置的物件。
這個就是鎖的物件a,class a
}}
a a =new a();
a a1 =new a();
a.test(a1);
這實際上鎖的是a1 這個物件。
Java多執行緒 synchronized同步方法
synchronized同步方法是為了解決 非執行緒安全 的問題,所謂 非執行緒安全 是指多個執行緒對同乙個物件中的變數進行併發訪問時發生,產生 髒讀 的情況。非執行緒安全 問題存在於 例項變數 中,如果是方法內部的私有變數,則不存在 非執行緒安全 問題,也就是 執行緒安全 的了。demo hass...
synchronized實現原理
jvm規範規定jvm基於進入和退出monitor物件來實現方法同步和 塊同步,但兩者的實現細節不一樣。塊同步是使用monitorenter和monitorexit指令實現,而方法同步是使用另外一種方式實現的,細節在jvm規範裡並沒有詳細說明,但是方法的同步同樣可以使用這兩個指令來實現。monitor...
synchronized 實現死鎖
synchronized首先明確鎖的是物件而不是方法 如果乙個物件有兩個方法,兩個執行緒分別呼叫其中乙個方法,如果鎖傳入的引數為 同一物件與不同物件,執行緒執行結果是不一樣的 死鎖 如下 package com.hanshow.wise.portal.center.controller.common...