JAVA-初步认识-第十三章-线程安全问题产生的原因

一.

对原因进行分析一下,为什么之前没事,现在就有事。

 

在栈的里面,我们就不画主线程了,有四条线程路径,有自己的run方法。而这run方法如果里面写for循环,写上x的话,每个线程都有一份。

冲突吧?不冲突,都使用自己的,而当我们去卖票的时候,在运行堆里面的这个num,这个num就是多个线程所共享的数据。

第一个线程,在操作共享数据的时候,比如说大于0,还没等进行下一步操作,在中间停了一下。第二个线程过来操作了。等第二个线程操作完了之后,第一个线程回来看时,num数据有可能发生变化。就是这样的原因造成的。

大家发现如果线程不在if和sop之间停的话,连续操作它们俩,就不会出现问题。

大家发现如果线程不在if和sop之间停的话,连续操作它们俩,就不会出现问题。正因为一个线程读了一半,其他线程参与了进来,这一参与就出事儿了。本来第一个线程判断1>0,第一个线程就要输出,还没等操作,下个线程把1给操作了。

所以,我们究其原因是什么?

在操作共享数据的语句两条以上时,容易出事。一条没有问题。这两条语句,在一个线程读取的过程中,其他线程也会参与运算,这会导致问题。

出现安全隐患是有前提的。

 

转载于:https://www.cnblogs.com/wsw-bk/p/8031645.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值