synchronized關鍵字的深刻理解

2021-08-30 21:02:44 字數 699 閱讀 5717

synchronized其實就是加鎖的意思

有兩種加鎖方式:1,給當前物件加鎖

2,給當前物件對應的class例項加鎖

看看第一種加鎖方式

class m;

public synchronized void m2(){};

這是給物件加鎖的第一種方式

比如產生了乙個物件,m m = new m();此時兩個執行緒a,b;當a操作這個m的m1方法時,會給這個m加鎖,然後執行m1,而執行緒b呼叫這個m的m2時,也會想給這個m加鎖,然而m已經被執行緒a加了鎖,所以無法加鎖,也就不能執行這個方法直到執行緒a把m1方法執行完,並把給m加的鎖釋放,這時執行緒b才能給m加鎖,並執行m2方法。

再來看看第二種給物件加鎖的方式,也就是加鎖**塊:

class m

public synchronized static void f2(){}

執行方式如先前給物件加鎖一樣,只是這裡是給class加鎖了,

m m1 = new m(); m m2 = new m();

產生兩個物件,兩個執行緒a,b,當執行緒a操作m1的f1時,會給class m加鎖,這時執行緒b想呼叫m2的方法時,會想給class m加鎖,顯然是不行的;然而如果把f2的static去掉後,這時執行緒b想呼叫m2的方法時確實可以的,因為它是想給m2物件加鎖,顯然這個物件還沒被加鎖。

public synchronized void f2(){}

synchronized關鍵字解析

一 修飾方法 1.修飾普通方法 對呼叫此方法的物件加鎖 2.修飾static方法 對呼叫此方法的類的所有物件加鎖 3.不能修飾構造方法,但是可以在構造方法內部修飾 塊 二 修飾 塊 1.synchronized this 相當於修飾普通方法 2.synchronized a.class 相當於修飾s...

解讀synchronized關鍵字

size large 最近在寫多執行緒程式,網上收集總結了synchronized的用法,結果如下 size 1 synchronized關鍵字的作用域有二種 1 是某個物件例項內,synchronized amethod 可以防止多個執行緒同時訪問這個物件的synchronized方法 如果乙個物...

synchronized 關鍵字分析

synchronized是典型的可衝入鎖,jdk1.5之後做了較大的優化 如圖,synchronized可以用在方法上也可以使用在 塊中,其中方法是例項方法和靜態方法分別鎖的是該類的例項物件和該類的物件。而使用在 塊中也可以分為三種,具體的可以看上面的 這裡的需要注意的是 如果鎖的是類物件的話,儘管...