文章

synchronized 关键字(整合版)

synchronized 关键字(整合版)

什么是 synchronized

synchronized 是 Java 内置同步关键字,本质是对象监视器(Monitor)锁。

synchronized 锁的到底是什么

答案是”锁对象”。

  • 实例方法:锁当前实例(this)。
  • 静态方法:锁当前类对象(Class)。
  • 同步代码块:锁 synchronized(obj) 中的 obj

常见使用方式

  1. 同步代码块:作用于大括号内临界区。
  2. 同步实例方法:作用于整个实例方法。
  3. 同步静态方法:作用于整个静态方法。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
public class Demo {
    private final Object lock = new Object();

    public void methodA() {
        synchronized (lock) {
            // 临界区
        }
    }

    public synchronized void methodB() {
        // 锁 this
    }

    public static synchronized void methodC() {
        // 锁 Demo.class
    }
}

语义速记

  • 可重入:同一线程可重复进入同一把锁。
  • 可见性:释放锁前的写,对后续获取同一锁的线程可见。
  • 互斥性:同一时刻仅有一个线程持有同一把对象锁。

相关阅读

本文由作者按照 CC BY 4.0 进行授权