『编程』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源码追根溯源吧 。
- [科旅号]并发现气辉现象,火星内部很危险,NASA洞察号证实火星地震活跃
- 「千锋长沙」软件测试需要懂编程吗?,千锋全栈软件测试课程教程资源限时领
- 开源中国@33 计划使用 OpenJDK 11 作为默认 Java 版本,Fedora
- Java架构师技术栈分享■request body读取流程详解,nginx
- [千锋广州]5个常用的Java微服务开源框架推荐
- 「Java架构学习交流」从基本概念深入到实现,跟面试官侃半小时MySQL事务隔离性
- 小智雅汇@C|编程的一些前置知识及底层(计算机组成与汇编)了解
- 「MySQL」5年经验 Java 程序员面试都用得上的mysql优化手册
- #Java#Java 图片保存到数据库
- 「Java」Java中的网络编程(一)
