synchronized物件鎖與類鎖

2021-09-12 06:10:47 字數 723 閱讀 3026

以前以為這兩個鎖是乙個鎖,最近測試了一下發現並不是這樣:

**如下

public class cusandpro 

} public static synchronized void test2() catch (interruptedexception e)

} }public static void main(string args)

catch (interruptedexception e)

}} );

thread thread2=new thread(new runnable()

} );

thread1.start();

thread2.start();

}}

結果:

thread-0方法1

thread-1方法2

thread-1方法2

thread-0方法1

thread-1方法2

thread-0方法1

發現交替列印,test1是synchronized修飾的普通方法,鎖住的是當前例項,test2是synchronized修飾的靜態方法鎖住的是

整個類,但是兩個方法都能執行,說明,類鎖和物件鎖不是同乙個鎖,鎖物件的時候,只有synchronized修飾的普通方法不能訪問,鎖類的時候,只有synchronized修飾的靜態方法不能訪問。

Synchronized 的使用(物件鎖 類

下面貼幾個例項來具體驗證下 預設情況下 synchronized 修飾的非靜態方法,其鎖為 this,與 synchronized this 效果一樣 public class synchronized public static void synctest final synchronized s...

執行緒鎖 synchronized

使用 synchronized解決執行緒同步問題相比較nslock要簡單一些,日常開發中也更推薦使用此方法。首先選擇乙個物件作為同步物件 一般使用self 然後將 加鎖 爭奪資源的讀取 修改 放到 塊中。synchronized中的 執行時先檢查同步物件是否被另乙個執行緒占用,如果占用該執行緒就會處...

執行緒之 鎖 synchronized鎖

多執行緒中有寫程式是由一寫bug的,學習執行緒鎖,很經典的例子,買票案例 有a,b,c三個視窗,同時售賣100張票,最後可能會出現賣了重複的票,或者多賣了,賣超了等執行緒不安全問題 看乙個執行緒不安全的賣票 小明,小張,小王同時去買票,就會出現上面的執行緒不安全問題,因為,視窗1賣了1張票,而另外兩...