synchronized實現同步的三種用法

2021-07-15 21:57:19 字數 624 閱讀 5962

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括號內配置的物件。

class a

}}

這個就是鎖的物件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...