youyichannel

志于道,据于德,依于仁,游于艺!

0%

Java内存模型 —— JMM_05

锁的获取和释放的内存语义

class MonitorExample {
int a = 0;
public synchronized void write() { // 1
a++; // 2
} // 3

public synchronized void read() { // 4
int i = a; // 5
// ...
} // 6
}

线程A释放锁,实质上是线程A向接下来将要获取这个锁的某个线程发出了(线程A对共享变量所做修改的)消息。

线程B获取锁,实质上是线程B接收了之前某个线程发出的(在释放这个锁之前对共享变量所做修改的)消息。

线程A释放锁,随后线程B获取这个锁,这个过程实质上是线程A通过主内存向线程B发送消息。(隐式通信

资料:https://www.bilibili.com/video/BV1LN411T7x9/ 强推 河北王校长