解析==java volatile关键字

本文探讨了在多线程环境下,Java中volatile关键字的作用机制。通过对比分析,在无同步机制时,JVM如何为变量创建副本供各线程独立操作,而使用volatile时,则直接操作主内存中的变量。此外还讨论了volatile并不能确保原子性操作。

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

java volatile


程序多线程执行环境:
主内存
线程A +  线程A内存
线程B +  线程B内存


1.没有同步机制的一般情况下,jvm会对变量复制一份
主内存 (normal_var)
线程A +  线程A内存 (normal_var_copy_A)
线程B +  线程B内存 (normal_var_copy_B)
所以可以看到线程A和B是各自操作自己的复制变量,需要的时候才会写入主内存里。


2.使用同步机制volatile关键字,jvm不会复制变量
主内存 (normal_var)
线程A +  线程A内存 (normal_var)
线程B +  线程B内存 (normal_var)
所以可以看到线程A和B是操作主内存里的变量。
但是,变量一定是拥有原子特性的。
private volatile int i;
i++ (读值-修值-写值) 是一串原子的组合,不能保证同步,只可以是同一块内存。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值