(五十一)volatile有什么作用

一、volatile作用

①保证内存可见性

通俗来说就是,线程A对一个volatile变量的修改,对于其它线程来说是可见的,即线程每次获取volatile变量的值都是最新的。

当一个变量被 volatile 修饰时,任何线程对它的写操作都会立即刷新到主内存中,并且会强制让缓存了该变量的线程中的数据清空,必须从主内存重新读取最新数据。

主存可见性的原因:

上图为Java内存模型,由上图可知共享变量是保存在主内存中的,当一个线程需要操作共享变量时,需要从主内存拷贝一份共享变量的副本到本地内存(这个本地内存对其他线程是不可见的),此时如果线程修改了共享变量,则会把修改后的值写回到本地内存,但该变量由本地内存写回主内存的时间是不可控的,只要没有写回主内存后续线程就无法读取到该变量的最新值,这是其一。其二如果其他线程的本地内存中已经包含了该变量的副本,那么即使该线程把最新值写回到主内存,其他线程由于已经有副本了,所以重新去主内存读取该变量的时间也不可控。

另一个版本解释(在Java内存模型中,有main memory,每个线程也有自己的memory (例如寄存器)。为了性能,一个线程会在自己的memory中保持要访问的变量的副本。这样

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值