从头认识java-17.4 详解同步(2)-详解竞争条件
来源:互联网 发布:i排版软件 编辑:程序博客网 时间:2024/06/06 04:34
这一章节我们来详细讨论一下竞争条件。
1.为什么会引起竞争条件?
由于操作缺失原子性。
2.什么是原子性?
所谓原子操作是指不会被线程调度机制打断的操作;这种操作一旦开始,就一直运行到结束,中间不会有任何 context switch (切换到另一个线程)。
3.分解上一章节转账的步骤:
(1)读取某个账户的余额,对比提取的金额
if (accounts[fromAccount] < money) {return;}
(2)从A账户转出XXX元
accounts[fromAccount] -= money;
(3)从B账户转入XXX元
accounts[toAccount] += money;
(1)现在线程A已经执行了上面的第一第二步
(2)现在线程B启动,对同样的账户进行上面的第一第二步
(这个时候已经出错了)
(3)线程A再执行第三步
(4)线程B再执行第三步
循环....
我们上面只是列出两个线程同时工作的情况,但是我们的测试程序开了20个线程,如果现实当中可能是20000甚至2000000个线程,数据直接就乱套了。
5.步骤图:
6.更糟的情况
由于决定这个误差出现的概率是由步骤2到步骤3之间的时间控制的,时间越长,误差出现的概率越高。
总结:这一章节主要详细讨论了竞争条件。
这一章节就到这里,谢谢。
-----------------------------------
目录
1 0
- 从头认识java-17.4 详解同步(2)-详解竞争条件
- 从头认识java-17.4 详解同步(1)-由竞争条件引发的问题
- 从头认识java-17.4 详解同步(3)-对象锁
- 从头认识java-17.4 详解同步(5)- 死锁
- 从头认识java-17.4 详解同步(4)-同步阻塞、synchronized和volatile
- 从头认识java-18.3 什么时候使用同步?
- 进程间通信的竞争条件详解
- 从头认识java-1.5 继承(2)
- Java多线程中的竞争条件、锁以及同步的概念
- 从头认识java-6.2 继承(Generalization)(2)
- 从头认识java-1.8 创建和操纵对象(2)
- 从头认识java-4.7 构造器初始化(2)
- 从头认识java-6.6 final(2)-属性域
- 从头认识java-11.3 格式化输出(2)
- 从头认识java-11.4 正则表达式(2)-基本语法
- java 同步(synchronized)详解
- 从头认识java-1.5 继承(1)
- 从头认识java-5.2 包(package)
- 数据库设计三大范式
- Ubuntu 14.04下NFS安装配置
- nth-child 的一些小尝试
- python解析xml文件注意
- redis入门
- 从头认识java-17.4 详解同步(2)-详解竞争条件
- 如何使用EndNote进行文献管理
- 2015年总结与2016年期望
- 65条最常用正则表达式,你要的都在这里了
- ios-基础用法之【1】-NSLog用法
- Fuel安装方法
- MPMovieplayerviewcontroller播放结束后自动消失的解决方案
- HTTP 错误 404.13 - Not Found 请求筛选模块被配置为拒绝超过请求内容长度的请求。
- DatePicker与TimePicker的使用