【关键字】java中volatile关键字的用法

这个关键字是比较简单的,用法大致只有两种,但是通过java内存模型可以进行深入的理解,这篇文章就不多于赘述,主要做一个记录,方便自己能够快速回忆相关用法:

1、禁止线程内部缓存变量,被volatile关键字修饰的变量,再线程读取时,直接通过公共内存进行读取(将主内存中的值刷新到自己的工作内存),不是在自己的cpu缓存中获取,所以保证每次获取到的都是最新的值。在写入的时候,也会直接同步到内存中。但是并不能保证并发的安全性,最简单的如i++,当获取最新值进入工作内存后,这是由于当前的增加操作不是原子性的,其他线程也可以同样获取最新值至自己的工作内存进行加操作,并将值刷新值主内存。

2、禁止重排序,编译器和处理器常常会对指令进行重排序(本地代码中插入许多内存屏障指令来保证处理器不发生乱序执行),在单线程的情况下,重排序是不会有任何问题的,如果有问题,就不会进行重排序了,但是在多线程情况下,就会出现问题,不能按照预期来执行。

据说对性能影响不大,写操作比正常情况稍慢,因为它需要在。具体没有测试,需要有测试的态度,但是没有测试的必要。

 

2019年10月08日修改

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值