从头认识java-17.4 具体解释同步(2)-具体解释竞争条件
2017-07-31 13:43
218 查看
这一章节我们来具体讨论一下竞争条件。
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之间的时间控制的,时间越长,误差出现的概率越高。
总结:这一章节主要具体讨论了竞争条件。
这一章节就到这里,谢谢。
-----------------------------------
相关文章推荐
- 从头认识java-17.4 详解同步(2)-详解竞争条件
- 从头认识java-17.4 详解同步(1)-由竞争条件引发的问题
- 从头认识java-17.4 详解同步(4)-同步阻塞、synchronized和volatile
- 从头认识java-17.4 详解同步(5)- 死锁
- 从头认识java-17.4 详解同步(3)-对象锁
- 从头认识java-1.3 隐藏具体实现
- Java多线程中的竞争条件、锁以及同步的概念
- 从头认识java-1.3 隐藏具体实现
- 从头认识java-18.3 什么时候使用同步?
- java线程同步——竞争条件的荔枝+锁对象
- Java多线程中的竞争条件、锁以及同步的概念
- 从头认识java-18.6 synchronized在其他对象上同步和ThreadLocal来消除共享对象的同步问题
- 从头认识java-18.6 synchronized在其它对象上同步和ThreadLocal来消除共享对象的同步问题
- 从头认识java-1.3 隐藏具体实现
- 从头认识java-特辑-foreach在java里面两种实现原理总结
- 从头认识java-9.12 接口Collection与Iterator
- 从头认识java-15.7 Map(6)-介绍HashMap的工作原理-装载因子与性能
- Java的位运算符具体解释实例——与(&)、非(~)、或(|)、异或(^)
- 从头认识Java之(Thinking in Java随记系列)Ⅱ
- 从头认识java-14.2 进一步了解数组