通俗易懂讲解volatile

        java中,对于加了volatile关键字的属性,对这个属性进行修改时,会直接将CPU高级缓存中的数据写回到主内存,对这个变量的读取也直接从主内存中读,从而保证了可见性。

        但是这里的原理涉及到了c语言的底层的汇编语言,理解起来比较复杂,我们可以从线程里面的内存从主内存交互的 整个过程来解释它为什么能保证可见性

内存从主内存交互的 整个过程,包括了它底层的汇编流程

                     这儿有一个插板就是主内存,两个插座分别是A线程和B线程的内存

1.每个线程都有它自己的内存副本。就是每个线程都有个flag,然后主内存里面也会有一个flag

2.正常情况下每个线程它去获取flag这个值的时候 就是从内存里面把这个值读出来,然后对flag进行操作

3.每个线程执行的时候都要读一份副本,比如线程1把flag变成一个false,这个操作线程2是不知道的

4.必须要等到这个线程把这个值同步到主线程,主线程再给另一个线程同步,另一个线程才能感知到flag变成false。

因为正常情况下,它已经读了一次主内存中的值已经有了副本了,不会再跟主内存进行交互了。

5.volatile的作用是可以让 另一个线程立马的感知。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值