多个线程同时去处理这个库存为什么这个库存可以做到数据的运算准确

多个线程同时去处理这个库存为什么这个库存可以做到数据的运算准确

问题描述:

多个线程同时去访问这个库存,为什么这个库存可以做到数据的运算准确?

相关截图:

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
时间也许一一 提问者 2022-06-30 18:11:58
我的意思是在不加同步关键字的情况下,四个线程同时对一个变量进行操作,为什么都可以对变量进行操作成功,而没发生错误
  • 同步代码块synchronized相当于一个锁,在多线程环境下,例如在线程一执行到一条语句时,线程调度权突然被线程二抢走了,再这样的环境下,每一个线程都拥有自己的方法栈,而公共变量的值是在线程启动时,复制一份放入线程的方法栈,之后线程都是操作的自己方法栈的变量副本,(当然为什么会出现有的票是正常卖的情况,因为有的线程在复制变量之前恰好别的线程,跑完了代码,进行了数据写回)才会发生卖了两张重复票或者卖超的情况。而synchronized是将你锁定的代码,在执行时,暴力的将多线程坍缩成单线程的执行方式,防止发生线程安全问题,因此同一时间只有一个线程可以在同步代码块中进行运行,其他线程需要锁里的线程,执行完后,释放锁才可以进入。因此能做到,线程安全,只是这种方式效率低下,能不加锁,实现线程安全,就尽量不要加锁。


    2022-06-30 20:48:24
  • 同学你好,之所以在不加同步关键字的情况下,四个线程同时对一个变量进行操作,可以对变量进行操作成功,而没发生错误的原因可能是同学没有调用sleep()方法。

    如果同学按照课程中提供的源码,运行代码在不加synchronized关键字的情况下,一定会发生超卖现象。

    如果同学的代码写入sleep(),依然操作成功,可能是同学代码中其他位置出现问题。老师建议同学提供源代码,老师才可以运行代码,为同学答疑。

    提供代码步骤为:

    https://img1.sycdn.imooc.com//climg/62be64f709e588cb07730326.jpg

    祝学习愉快!

    2022-07-01 11:07:50
好帮手慕小黑 2022-06-30 17:29:25

同学你好,synchronized的作用是在多线程环境下,保证在同一时刻, 被修饰的代码块或方法只会有一个线程执行,以达到保证并发安全的效果。之所以库存可以做到数据的运算准确,是因为在sale()方法上加上了synchronized关键字。

祝学习愉快!


问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师