原子性:一个操作或多个操作,要么全部执行并且执行的过程中不会被打断,要么都不执行。
可见性:多个线程同时访问一个变量时,一个线程改变了这个变量的值,其他线程能立即看到修改的值。
有序性:程序的执行顺序按照代码的先后顺序执行。
PS:Java 如何实现原子操作
- CAS:保证原子性
- volatile:单个操作保证原子性,组合操作(例如:++操作符)不保证原子性证
- Lock:保证原子性
- synchronized:保证原子性
java堆和方法区是多个线程共享的数据区域,多个线程可以操作堆和方法区中的同一个数据,Java 内存模型的英文名称为 Java Memory Model(JMM),其并不像 JVM 内存结构一样真实存在,而是一个抽象的概念。
从抽象的角度来看,JMM定义了线程和主内存之间的抽象关系:
- 线程之间的共享变量存储在主内存中
- 每一个线程都有一个私有的本地内存(抽象出来的,并不是真实存在的)
线程 A/B 之间通信主要经历步骤为: - 线程A把本地内存中A更新过的数据刷新到主内存中
- 线程B读取主内存中A更新过的数据
从整体上看,这个通信过程需要经过主内存。JMM 通过控制主内存与每个线程本地内存之间的交互来提供内存可见性保证。



