5.volatile是什么?怎么保证可见性?

volatile是什么?

老王:小陈啊,上一章节结束之前让你看一下volatile,现在研究得怎么样了?

小陈:上一章结束之后啊,我回去看了一下资料,大概知道volatile是个啥东西了。

老王:哦,那你来说说。

小陈:volatile是java语言提供的一个关键字,用来修饰变量的,使用volatile修饰的变量可以保证并发安全的可见性和有序性。

小陈:volatile关键字的用法大概是下面这样的:

volatile int i = 0;
public void add() {
    i++;
}

使用方法就是声明变量之前加一个volatile关键字,然后变量 i 的操作就跟我们平常的操作是一样的。

但是添加的volatile的变量,在编译之后JVM会在操作该变量的前后添加一些指令来保证可见性和有序性,具体添加了啥指令这个到时候还得靠老王你来讲解一下哈,因为我还没了解到那一步,哈哈。

volatile对可见性保证

老王:哈哈,没关系,到时候我再补充一下,你先来先说说volatile怎么保证可见性的?

小陈:结合之前讲的MESI缓存一致性协议,看了一些资料。大概知道volatile在JMM层次和CPU高速缓存层次是怎么确保可见性的了

老王:哦,这么机灵,那你来说说看....

小陈:使用volatile关键字修饰的共享变量,每次线程使用之前都会重新从主内存中重新读取最新的值;一旦该共享变量的值被修改了,修改它的线程比如立刻将修改后的值强制刷新回主内存

小陈:我画个图来说一下:

(1)首先看一下上面的图,有工作线程A、工作线程B;假如之前工作线程A、B都是用过这个共享变量 i,工作内存中都有变量副本 i = 0

(2)这个时候工作

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值