从头认识java-18.4 java多线程原子性操作里面的坑
来源:互联网 发布:java工程师项目经验 编辑:程序博客网 时间:2024/05/17 05:50
这一章节我们来讨论一下java多线程原子性里面的坑。
1.看似原子性操作:
package com.ray.ch18;public class Test {private int a = 0;private int b = 0;public void methodA() {b = a + 1;}public int methodB() {return a;}}
观察上面的代码,两个方法貌似都是原子性操作。
2.揭开上面代码的真面目(通过javap反编译):
上图是反编译之后的虚代码,我们看两个红色框,在methodA里面,虽然只有一句b=a+1,但是在jvm执行的过程中是两句代码,一个是get一个是put,如果是多线程操作,中间的代码就可能被其他线程读取或者写入,因此这一个不是原子性操作
3.结论:
在多线程的编程里面,不要依赖原子性操作,(除非你真的专家级别),推荐还是使用synchronized来保证操作的原子性。
4.一般的原子性操作有:
赋值和返回
代码:
package com.ray.ch18;public class Test {private int a = 0;private int b = 0;public void methodA() {b = 1;}public int methodB() {return a;}}
反编译:
红框那里只有一句就完事了,中间没有任何的其他代码。
总结:这一章节举例说明了多线程原子性操作里面的坑。
这一章节就到这里,谢谢。
-----------------------------------
目录
1 0
- 从头认识java-18.4 java多线程原子性操作里面的坑
- 从头认识多线程-3.2 使用volatile声明的变量的写操作是非原子性的
- 从头认识java-17.1 多线程
- 从头认识java-8.10 接口里面的类
- Java多线程--原子操作的原理
- volatile AtomicInteger java多线程操作 原子性
- java 多线程:原子性
- java 多线程:原子性
- 从头认识java-2.1 操作符
- 从头认识java-2.2 算术操作符
- 从头认识java-2.6 逗号操作符
- Java多线程(二)认识Java里面的Thread
- Java多线程-(6)java 原子操作
- Java多线程中实现原子操作的方法
- 从头认识java-目录
- Java多线程总结(5)— 原子性、可见性、有序性和并发库的原子性操作
- java多线程之线程并发库原子性操作类
- Java多线程复习与巩固(七)--原子性操作
- 台大机器学习笔记(2)——Learning to Answer Yes/No
- Hanoi汉诺塔问题
- Mac环境下Git的使用
- 图像处理之让手心长出眼睛,其实嘴也可以~
- PLSQL 连接 oracle 12c
- 从头认识java-18.4 java多线程原子性操作里面的坑
- CodeForces 614A Link/Cut Tree
- MSDN值得学习的地方
- Android的DiskLruCache硬盘缓存技术
- 各数据库验证存储过程
- 新手粗谈android四大组件之Activity
- qt捕获cmd控制台标准输出(输入输出重定向)
- ZJU1005-Jugs
- 91. String to Integer (atoi)