Java内存模型(JMM)
一、JMM基本概念
JMM(Java Memory model):是一套多线程读写共享数据时,对数据的可见性,有序性和原子性的规则(并发编程三要素)。
二、JMM三大特性
-
原子性
- 一个或多个操作,要么全部执行,要么全部不执行。
- 处理器优化可能会造成原子性问题
-
可见性
- 只要有一个线程对共享变量的值做了修改,其他线程都将马上收到通知,立即获得最新的值。
- 缓存一致性问题其实就是可见性问题
-
有序性
-
有序性可以总结为:在本线程内观察,所有的操作都是有序的;而在一个线程内观察另一个线程,所有操作都是无序的。处理器为了提高程序的运行效率,提高并行效率,可能会对代码进行优化。编译器认为,重排序后的代码执行效率更优。这样一来,代码的执行顺序就未必是编写代码时候的顺序了,在多线程的情况下就可能会出错。
-
指令重排序会造成有序性问题
-
评论区