volatile关键字介绍

volatile关键字

1、当一个变量被定义为volatile时,这个变量对所有线程是可见的,就是说当一个线程修改了这个变量时,其他线程读取到的永远是修改后的最新的值。
但不能因为这样就说基于volatile变量的运算在并发下是安全的,比如多个线程对一个数据进行++操作时:当前线程读取到的是最新的值,但是在它对数据进行++时,别的线程可能也对此时的数据进行了++操作,这就导致当前线程的++操作是无效的。
2、volatile关键字还能禁止指令重排序列化。
例如:指令1把A的值加10,指令2把A的值乘2,指令3把B的值加1。因为指令1和2有依赖关系,所以他们不会重排序,但指令3在执行的时候可能排到1之前或者1和2的中间。
3、使用volatile关键字要比其他同步工具更快。
volatile进行读操作时性能消耗跟普通变量几乎没有什么差距,但是写操作可能会慢一些,因为它需要在本地代码中插入内存屏障指令来禁止重排序。即便如此,它的性能消耗大多数情况下也要比锁低

使用volatile关键字需要满足的条件:
1、写入变量时并不依赖变量的当前值,或者能确保只有单一线程修改变量的值
2、变量不需要与其他状态变量共同参与不变约束
3、访问变量时,没有其他原因需要加锁

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值