Java并发编程笔记—原子性、可见性、有序性

Java内存模型(JMM)规定了主存、工作内存的交互规则,确保多线程环境下的数据一致性。volatile关键字确保可见性和有序性,通过内存屏障防止指令重排序。写屏障保证volatile变量更新同步到主存,读屏障则确保读取到最新值。volatile原理基于内存屏障,防止CPU优化导致的顺序调整。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JMM  Java Memory Model,它定义了主存、工作内存抽象概念,底层对应着 CPU 寄存器、缓存、硬件内存、 CPU 指令优化等。

JMM 体现在以下几个方面

原子性 - 保证指令不会受到线程上下文切换的影响

可见性 - 保证指令不会受 cpu 缓存的影响

有序性 - 保证指令不会受 cpu 指令并行优化的影响

可见性

volatile(易变关键字)

它可以用来修饰成员变量和静态成员变量,他可以避免线程从自己的工作缓存中查找变量的值,必须到主存中获取 它的值,线程操作 volatile 变量都是直接操作主存 。

有序性

JVM 会在不影响正确性的前提下,可以调整语句的执行顺序

volatile 原理 

volatile 的底层实现原理是内存屏障,Memory BarrierMemory Fence

 volatile 变量的写指令后会加入写屏障

 volatile 变量的读指令前会加入读屏障

volatile如何保证可见性

写屏障(sfence)保证在该屏障之前的,对共享变量的改动,都同步到主存当中

而读屏障(lfence)保证在该屏障之后,对共享变量的读取,加载的是主存中最新数据

volatile如何保证有序性

写屏障会确保指令重排序时,不会将写屏障之前的代码排在写屏障之后

读屏障会确保指令重排序时,不会将读屏障之后的代码排在读屏障之前

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值