synchronized 关键字(整合版)
synchronized 关键字(整合版)
什么是 synchronized
synchronized 是 Java 内置同步关键字,本质是对象监视器(Monitor)锁。
synchronized 锁的到底是什么
答案是”锁对象”。
- 实例方法:锁当前实例(
this)。 - 静态方法:锁当前类对象(
Class)。 - 同步代码块:锁
synchronized(obj)中的obj。
常见使用方式
- 同步代码块:作用于大括号内临界区。
- 同步实例方法:作用于整个实例方法。
- 同步静态方法:作用于整个静态方法。
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 进行授权