请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

锁的理解

图片描述
关于锁为什么在add 和desc 方法中,只在一个方法加锁是不行的? add方法不是不会被打断吗?那一百万一定全都都加上去了,而desc也减少了1百万。为啥运行结果有正数也有负数,就是不为0?有点笨(●ˇ∀ˇ●) 求解

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

插入代码

1回答

提问者 仙女座舜 2020-02-06 21:36:29

是因为这样写,在执行add 锁里面的代码的时候,依然会切出去到另一个线程里去执行desc这个方法,因为desc代码里没有加锁,所以不需要拿到同一个锁后才能执行代码,desc依然执行,因此只对一个方法加锁相当于都没加锁。即A线程的add方法被调用,依然切换会切换到B线程,而B线程的没加锁的代码都会正常执行。对吧?。

之前把加锁理解成加锁的代码全部执行完成前,cpu不会给其他线程分配时间因此,这种理解是错的。


1 回复 有任何疑惑可以回复我~
  • bobby #1
    锁如果只加在一个地方和没有加锁无区别, 所以锁一般都是多个地方竞争一个资源的时候才加, 所以你这样做法就很奇怪了
    回复 有任何疑惑可以回复我~ 2020-02-07 13:32:14
  • 提问者 仙女座舜 回复 bobby #2
    嗯嗯谢谢老师,搞懂了。
    回复 有任何疑惑可以回复我~ 2020-02-07 13:46:37
  • bobby 回复 提问者 仙女座舜 #3
    好的,
    回复 有任何疑惑可以回复我~ 2020-02-07 13:49:49
问题已解决,确定采纳
还有疑问,暂不采纳
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号