synchronized同步方法

2021-07-27 11:57:24 字數 937 閱讀 2955

關鍵字synchronized

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

資料髒讀的情況

如果a執行緒呼叫某個物件anyobject的的synchronized方法, 則執行緒a獲得該物件anyobject的鎖。其他執行緒如果要呼叫該物件anyobject的synchronized方法, 則需要等待a執行緒釋放該鎖。如果獲取該物件anyobject的非synchronized方法,則無需獲得該物件anyobject的鎖。主要表現在get和set的方法上面

鎖的重入

如果執行緒a獲得某個物件nyobject的的synchronized方法,則執行緒a想要獲取其他的synchronized的方法,則可以獲得到。同樣子類可以通過「可重入鎖」呼叫父類的同步方法

下面例1會出現資料髒讀的現象,需要在get的方法上面加上synchronized關鍵字

例1:public class publicvar

synchronized public void setval(string name, string pwd)catch(exception e) }

public string getval()

public static void main(string args) throws exception }

class threada extends thread

@override

public void run() }

出現異常的時候,鎖會被釋放掉

同步不具備繼承性,即父類中定義了乙個同步的方法,如果子類覆蓋了該方法,然而子類沒有加上關鍵字synchronized,則子類中的例項對該方法不具有同步性

執行緒同步synchronized

synchronized只是保證在同乙個時刻,其他執行緒不能訪問鎖定的資源,但是其他方法或者是變數不能鎖定控制的 synchronized obj 上面語法格式中synchronized後括號裡的obj就是同步監視器,上面 的含義是 執行緒開始執行同步 塊之前,必須先獲得對同步監視器的鎖定。任何時刻...

Synchronized同步方法

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

synchronized執行緒同步

public class testsyn implements runnable public synchronized voidm2 throws exception public void run catch exception e public static voidmain string a...