文章目录
volatile写的内存语义
- 当写一个volatile变量时,JMM会把该线程对应的本地内存中的共享变量值刷新到主内存。
volatile读的内存语义:
- 当读一个volatile变量时,JMM会把该线程对应的本地内存置为无效,线程接下来将从主内存中读取共享变量。
volatile内存语义的实现原理
JMM属于语言级的内存模型,它确保在不同的编译器和不同的处理器平台之上,通过禁止特定类型的编译器重排序和处理器重排序,为程序员提供一致的内存可见性保证。
volatile禁止重排序规则
为了实现volatile的内存语义,JMM会限制编译器重排序,JMM针对编译器制定了volatile重排序规则表。
volatile禁止重排序场景
- 当第二个操作是volatile写时,不管第一个操作是什么,都不能重排序。
- 当第一个操作是volatile读时,不管第二个操作是什么,都不能重排序。
- 当第一个操作是volatile写,第二个操作是volatile读时,不能重排序。
有序性案例分析
案例描述
假设我们有一个共享变量count,它被多个线程同时访问和修改。为了避免线程安全问题,我们可以