hooyantsing's Blog

30_理解JMM

字数统计: 446阅读时长: 1 min
2020/08/28

30 理解JMM

狂神说Java JUC并发编程最新版通俗易懂

详见 辅佐资料_Java JMM和底层实现原理 - 简书

JMM和JVM不一样,它是一种规定,并非像JVM一样存在的东西。

图解JMM

“工作内存”就是: CPU Cache CPU高速缓存。

Java内存模型中定义了8种操作来完成,虚拟机保证了每种操作都是原子的。

  • lock(锁定):作用于主存的变量,把一个变量标识为一条线程独占状态。
  • unlock(解锁):作用于主存变量,把一个处于锁定状态的变量释放出来,释放后的变量才可以被其他线程锁定。
  • read(读取):作用于主存变量,把一个变量的值从主存传输到工作内存。
  • load(载入):作用于工作内存变量,把 read 来的值放入工作内存的变量副本中。
  • use(使用):作用于工作内存变量,把工作内存中一个变量的值传递给执行引擎,每当虚拟机遇到一个给变量赋值的字节码指令时执行这个操作。
  • assign
  • store(存储):作用于工作内存变量,把工作内存中一个变量的值传送到主存。
  • write(写入):作用于主存变量,把 store 操作从工作内存中得到的变量的值放入主存的变量中。

    案例,验证JMM

即便是num已经发生改变,这个线程的工作内存也是 num=0

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package tvolatile;

public class JMMDemo {
private static int num = 0;
public static void main(String[] args) throws InterruptedException {
// 即便是num已经发生改变,这个线程的工作内存也是 num=0
new Thread(
() -> {
while (num==0){}
}
).start();

Thread.sleep(1000);
num++;
System.out.println(num);
}
}
CATALOG
  1. 1. 30 理解JMM
    1. 1.0.1. 图解JMM
    2. 1.0.2. 案例,验证JMM