首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java synchronized 區塊同步方法完整指南(含非靜態、靜態、內部類、跨類同步)

     編輯:Java 相關知識

核心概念

synchronized 區塊語法:synchronized(鎖物件) { 同步程式碼 }。鎖物件決定了哪些執行緒會互斥。

1. 非靜態方法同步(實例鎖)


public class SyncBlock {
    public void method1() { synchronized(this) { ... } }
    public void method2() { synchronized(this) { ... } }
    public synchronized void method3() { ... } // 等價
}
  • 同一實例下,三方法任一時刻僅一個可執行。
  • 內部類同步外部實例:synchronized(OuterClass.this)。

2. 靜態方法同步(類鎖)


public class StaticSyncBlock {
    public static void method1() { synchronized(StaticSyncBlock.class) { ... } }
    public static synchronized void method2() { ... }
}
  • 靜態方法無 this,必須用 Class 物件(.class 或 instance.getClass())。
  • 不同類別可共用同一 Class 鎖實現跨類同步。

3. 同步區塊異常安全

JVM 保證離開區塊(正常或異常)自動釋放監視器,無需手動處理。

4. 避坑指南

錯誤做法後果正確做法
靜態方法用 this編譯錯誤用 MyClass.class
同步區塊鎖字串並重新賦值鎖物件改變,同步失效宣告 final
基本型別當鎖編譯錯誤用包裝類或專用 Object

5. 實務建議

  1. 鎖物件 final、私有、不可變。
  2. 同步區塊越小越好,避免 I/O、睡眠等耗時操作。
  3. 需公平鎖、可中斷、條件變數時改用 ReentrantLock。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved