JMM

java内存模型

本身只是一个抽象概念,只是一种规范,用来实现线程与主内存之间的关系还有就是屏蔽各个硬件平台和操作

系统的内存访问差异

关键技术点都是围绕多线程的原子性,可见性和有序性展开的

在该模型下,多线程对变量的读写过程

所有的共享变量是存储在物理主内存中的

而每个线程都有自己独立的工作内存,里面保存着该线程使用到的变量的副本

线程对共享变量的读写都得先在工作内存中操作,后写回主内存,不能直接在主内存中读写

happens-before

他就是说在JMM中,如果一个操作执行的结果需要对另外一个操作可见性,那么这两个操作之间

必然存在happens-before关系

有什么用?

有没有发现,我们没有时刻添加volatile和synchronized来完成程序,这是因为java语言中JMM原则下有一个happenss-before原则限制和规则

依赖这个原则,我们可以通过几条简单的规则一下子解决并发下两个操作之间是否可能存在冲突的有

所有问题