采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
关于锁为什么在add 和desc 方法中,只在一个方法加锁是不行的? add方法不是不会被打断吗?那一百万一定全都都加上去了,而desc也减少了1百万。为啥运行结果有正数也有负数,就是不为0?有点笨(●ˇ∀ˇ●) 求解
是因为这样写,在执行add 锁里面的代码的时候,依然会切出去到另一个线程里去执行desc这个方法,因为desc代码里没有加锁,所以不需要拿到同一个锁后才能执行代码,desc依然执行,因此只对一个方法加锁相当于都没加锁。即A线程的add方法被调用,依然切换会切换到B线程,而B线程的没加锁的代码都会正常执行。对吧?。
之前把加锁理解成加锁的代码全部执行完成前,cpu不会给其他线程分配时间因此,这种理解是错的。
锁如果只加在一个地方和没有加锁无区别, 所以锁一般都是多个地方竞争一个资源的时候才加, 所以你这样做法就很奇怪了
嗯嗯谢谢老师,搞懂了。
好的,
登录后可查看更多问答,登录/注册
慕课网严选精品教程,高质量内容+服务!
1.4k 20
1.7k 17
1.3k 17
1.2k 17
1.5k 13
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号