从头认识java-17.4 具体解释同步-具体解释竞争条件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从头认识java-17.4 具体解释同步-具体解释竞争条件相关的知识,希望对你有一定的参考价值。

这一章节我们来具体讨论一下竞争条件。

1.为什么会引起竞争条件?

因为操作缺失原子性。


2.什么是原子性?

所谓原子操作是指不会被线程调度机制打断的操作;这样的操作一旦開始,就一直运行到结束。中间不会有不论什么 context switch (切换到还有一个线程)。


3.分解上一章节转账的步骤:

(1)读取某个账户的剩余金额。对照提取的金额

if (accounts[fromAccount] < money) {
			return;
		}

(2)从A账户转出XXX元

accounts[fromAccount] -= money;


(3)从B账户转入XXX元

accounts[toAccount] += money;


4.因为不具备原子性,并且是多线程运行,因此我们能够如果:

(1)如今线程A已经运行了上面的第一第二步

(2)如今线程B启动。对相同的账户进行上面的第一第二步

(这个时候已经出错了)

(3)线程A再运行第三步

(4)线程B再运行第三步

循环....

我们上面仅仅是列出两个线程同一时候工作的情况,可是我们的測试程序开了20个线程。如果现实其中可能是20000甚至2000000个线程,数据直接就乱套了。


5.步骤图:

技术分享


6.更糟的情况

因为决定这个误差出现的概率是由步骤2到步骤3之间的时间控制的,时间越长,误差出现的概率越高。


总结:这一章节主要具体讨论了竞争条件。


这一章节就到这里,谢谢。

-----------------------------------

文件夹




以上是关于从头认识java-17.4 具体解释同步-具体解释竞争条件的主要内容,如果未能解决你的问题,请参考以下文章

网页中使用传统方法实现异步校验具体解释

对解释器模式的认识

Nginx笔记nginx配置文件具体解释

从头认识java-18.2 主要的线程机制join

具体解释Redis源代码中的部分高速排序算法(pqsort.c)

机器学习经典算法具体解释及Python实现--线性回归(Linear Regression)算法