一、修飾方法
1.修飾普通方法:對呼叫此方法的物件加鎖
2.修飾static方法:對呼叫此方法的類的所有物件加鎖
3.不能修飾構造方法,但是可以在構造方法內部修飾**塊
二、修飾**塊
1.synchronized(this):相當於修飾普通方法
2.synchronized(a.class):相當於修飾static方法
3.synchronized(例項變數):給呼叫此方法的物件的例項變數加鎖
例子:public class a}}
4.synchronized(類變數):給呼叫此方法的類的所有物件的類變數加鎖
例子:public class a}}
5.synchronized(物件):明確給某個指定物件加鎖
例子:public class a}}
6.synchronized**塊不能修飾基本資料型別的變數
7.synchronized**塊修飾基本資料型別的包裝類時,如果在同步塊中對同步變數進行運算會導致同步失效,
因為內部包含了封箱拆箱動作,包裝類引用指向了新的物件
8.synchronized**塊修飾string變數時,如果在同步塊中對string變數重新賦值會導致同步失效,
因為建立string的例項並不需要new,string變數在重新賦值時引用指向了新的物件
三、synchronized不能被繼承
解讀synchronized關鍵字
size large 最近在寫多執行緒程式,網上收集總結了synchronized的用法,結果如下 size 1 synchronized關鍵字的作用域有二種 1 是某個物件例項內,synchronized amethod 可以防止多個執行緒同時訪問這個物件的synchronized方法 如果乙個物...
synchronized 關鍵字分析
synchronized是典型的可衝入鎖,jdk1.5之後做了較大的優化 如圖,synchronized可以用在方法上也可以使用在 塊中,其中方法是例項方法和靜態方法分別鎖的是該類的例項物件和該類的物件。而使用在 塊中也可以分為三種,具體的可以看上面的 這裡的需要注意的是 如果鎖的是類物件的話,儘管...
synchronized 關鍵字原理
眾所周知synchronized關鍵字是解決併發問題常用解決方案,有以下三種使用方式 實現原理 jvm是通過進入 退出物件監視器 monitor 來實現對方法 同步塊的同步的。具體實現是在編譯之後在同步方法呼叫前加入乙個monitor.enter指令,在退出方法和異常處插入monitor.exit的...