volatile关键字

volatile关键字是一种比synchronized更轻量级的同步方法,它提供了一种免锁机制。与synchronized相比,volatile可以保证可见性、有序性,但不能保证原子性,所以只有在一些对原子性没有要求的场合才可以用volatile代替synchronized。

可见性:普通情况下线程读数据时把数据从内存读到自己的缓存区,以后可能会直接从缓存区读取,而不经过内存,写数据时也是先写入缓存区,然后再写入内存。而在可见性情况下,线程写数据时会将数据直接写入内存,同时通知其他线程把缓存区中的该数据作废,让它们去内存中重新读取数据,这样就保证了数据的更新对其他线程是可见的。

有序性:指令优化时可能会把一些指令的顺序改变,这样有可能造成线程的执行结果出现异常,如果把一个变量声明为volatile,那么在这条语句之前的语句不会在它之后执行,在这条语句之后的语句也不会在它之前进行,保证了有序性。

原子性:例如i++操作,如果不是原子性的话,两个线程同时进行i++,可能最后的结果不是 i+2,而是i+1,因为两个线程读到的值可能是一样的。所以volatile只能在对原子性没有要求的情况下使用:(1)对变量的写操作不依赖于当前值;(2)该变量没有包含在其他变量的不变式中。可以认为除了赋值之外不对该变量做其他操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值