java-并发-Volitile

作用:

1. 共享变量在线程之间的可见性

2. 禁止指令重排序

 

具体实现方式:

1. 共享变量在线程之间的可见性

多线程的情况下,多个线程操作同一个共享变量的时候,是把共享变量复制一份,复制到自己的线程内存中,然后在私有线程里去操作自己单独的变量。等线程执行完毕的时候,会把私有线程中的变量复制到共享变量中,更新共享变量。

线程可见性指的是,当线程A复制了数据num,线程B也复制了数据num,这时候线程A对num赋值2,线程B看到的是num=2

具体实现为,volatile在进行写操作的时候,会对对应的变量增加写屏障,此时别的线程是无法对此变量进行读操作的,写的时候,是将数据写到当前的cpu缓存中,然后同步到主存中,此时同时会将其他cpu缓存中的值设置为无效,这时候如果别的线程如果要去读取值,就会发现cpu缓存中的值是无效的,那么就会去主存中读取。就会拿到最新的值。

 

2. 禁止指令重排序

在每个volatile写操作的前面插入一个StoreStore屏障,防止写volatile与后面的写操作重排序。

在每个volatile写操作的后面插入一个StoreLoad屏障,防止写volatile与后面的读操作重排序。

在每个volatile读操作的后面插入一个LoadLoad屏障,防止读volatile与后面的读操作重排序。

在每个volatile读操作的后面插入一个LoadStore屏障,防止读volatile与后面的写操作重排序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值