Volatile为什么不能做i++问题的个人理解

本文探讨了volatile关键字在多线程环境下无法保证原子性的问题,通过举例说明了在并发操作中,volatile变量如i进行自增时可能出现的数据不一致情况。由于volatile不保证操作的顺序和可见性,可能导致线程间的操作交错,从而丢失更新。解决方法是使用synchronized来确保互斥访问,以保证并发安全。文章强调volatile更适合用于保存状态型的boolean值,而非参与计算的变量。
摘要由CSDN通过智能技术生成

Volatile为什么不能做i++问题的个人理解
volatile不保证原子性,也就是说在对volatile变量读写操作的时候,容易出现问题。
我的理解如下:
假设有10个线程,每个线程对i进行++1,1000次操作
在A线程将主内存变量int i=3读取回工作内存的时候,这里是原子性的,但是当A线程调用CPU对 i的值+1的运算间隙,也许是1ns,这个时候B线程已经等不及了,来抢资源了,B并没有等A将i的操作做完再读取i的值,这个时候B线程获取到了i的值,也是3,(如果是单线程,那么应该是A线程i+1返回给主内存4,B去主内存拿4,再+1,这样循环累加),B就是对3进行+1了,原本B是要对A修改之后的i(也就是4)进行++操作,但是B是和A一样拿到了3,这样就丢失了一次i++。造成总的累加的值,到不了10000,。
解决办法就是加synchronized,保证只有一个线程进来操作。
通常volatile用来保存某个状态的boolean值。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值