synchronized方法同步注意事項

2021-08-31 05:13:59 字數 848 閱讀 7135

1.

只有同一例項的synchronized方法同一時間只能被乙個執行緒執行,不同例項的synchronized方法是可以併發的。例如,class a定義了synchronized方法sync(),則不同例項a1.sync()和a2.sync()可以同時由兩個執行緒來執行。

2.某個物件例項內,synchronized amethod(){}可以防止多個執行緒同時訪問這個物件的synchronized方法(如果乙個物件有多個synchronized方法,只要乙個執行緒訪問了其中的乙個synchronized方法,其它執行緒不能同時訪問這個物件中任何乙個synchronized方法)。這時,不同的物件例項的synchronized方法是不相干擾的。也就是說,其它執行緒照樣可以同時訪問相同類的另乙個物件例項中的synchronized方法;

3.synchronized static astaticmethod{}防止多個執行緒同時訪問這個類中的synchronized static 方法。它可以對類的所有物件例項起作用。

4.除了方法前用synchronized關鍵字,synchronized關鍵字還可以用於方法中的某個區塊中,表示只對這個區塊的資源實行互斥訪問。用法是: synchronized(this),它的作用域是當前物件;

但是和2中所說相同,使用this關鍵字會使該物件中的所有 synchronized 方法加鎖

synchronized(syncobject)

//可以靈活對部分**加鎖

5.synchronized關鍵字是不能繼承的,也就是說,基類的方法synchronized f(){} 在繼承類中並不自動是synchronized f(){},而是變成了f(){}。繼承類需要你顯式的指定它的某個方法為synchronized方法;

Java多執行緒 synchronized同步方法

synchronized同步方法是為了解決 非執行緒安全 的問題,所謂 非執行緒安全 是指多個執行緒對同乙個物件中的變數進行併發訪問時發生,產生 髒讀 的情況。非執行緒安全 問題存在於 例項變數 中,如果是方法內部的私有變數,則不存在 非執行緒安全 問題,也就是 執行緒安全 的了。demo hass...

synchronized同步方法

關鍵字synchronized 如果是在方法內的變數,則無所謂的的變數同步問題。因為在方法內部的變數都是私有的。synchronized如果是加在方法上面,則是對該物件的例項進行同步。如果有兩個執行緒同時對該方法進行操作,則會同步進行。對個例項多個執行緒,不存在同步的問題,那時jvm會生成多個鎖,應...

Synchronized同步方法

非執行緒安全 其實會在多個執行緒對同乙個物件中的例項變數進行併發訪問時發生,產生的後果就是 髒讀 也就是取到的資料其實是被更改過的。1 方法內的變數為執行緒安全的 方法內部的私有變數,則不存在 非執行緒安全 的問題,所得結果也就是 執行緒安全 的。2 例項變數非執行緒安全 如果多個執行緒共同訪問乙個...