『编程』Java并发编程之CAS第一篇理解( 二 )


问题:
在12和13行 , 运行后的结果是什么呢?
true\t运行后 。 当前i的值为:2020
false\t运行后 。 当前i的值为:2020
为什么会是这样呢?
运行结果分析我们来分析:
在11行的时候 , 声明了变量i.并赋值为1(即V) , 然后第12行 , 拿着预期值1(即A)和将要更新的值2020(即B).进行CAS之后 , 因为1==1也就是V==A 。 这个中情况下 , 就会把2020重新赋值给V 。 所以 , 第12行输出的就是true和2020;
在第13行假设是线程2来访问 。 线程2自己工作空间变量副本依然是1 , 更行值是1024.这个时候进行CAS的时候 , 因为现在主内存V的值是2020 , 所以2020 != 1也就是V != A 。 这个时候 , V的值不能被更新 , 所以第13行输出的是就是false和2020.
在看下面:
问题:第14行输出的是什么呢 ?
我们来看看运行结果:
为什么呢?大家可以尝试这去分析分析 。 (PS:提示 , 看看上文CAS定义和CAS操作流程来分析) 。
【『编程』Java并发编程之CAS第一篇理解】在下一节中 , 凯哥(凯哥Java:kaigejava)将和大家唠唠CAS的原理 。 为什么 , 如果不加锁的话 , volatile不能保证原子性 , 但是atomic包下的类就可以保证原子性呢?我们从AtomicInteger源码追根溯源吧 。