1. i++不是原子操作
2. 解决方案 --CAS机制
三个值:
旧值 : 每次从主内存中获取时,记录该值。
新值:执行++后 该值为新值
要修改的值:刷新到主内存时,获取的值。
1. 每次存(刷新到主内存时)的时候,比较旧值和要修改的值 2. 如果为true,证明没有别的线程修改过,直接将新值刷新到主内存即可 3. 如果为false,证明已经被别的线程修改过,重新获取主内存的值。 1.每次获取主内存值,都将其记录为旧值 2.++后的值 记录为新值 3.存之前判断 旧值和要修改的值(来自于当前的主内存)是否相等 4.如果相等,说明没有别的线程修改,直接将新值覆盖主内存的值 5.如果不等,证明已经被别的线程修改过,重新获取主内存的值。 .......该机制被称为乐观锁,只对修改操作做判断。