锁的理解
来源:8-4 线程同步 - Lock

仙女座舜
2020-02-06
关于锁为什么在add 和desc 方法中,只在一个方法加锁是不行的? add方法不是不会被打断吗?那一百万一定全都都加上去了,而desc也减少了1百万。为啥运行结果有正数也有负数,就是不为0?有点笨(●ˇ∀ˇ●) 求解
写回答
1回答
-
仙女座舜
提问者
2020-02-06
是因为这样写,在执行add 锁里面的代码的时候,依然会切出去到另一个线程里去执行desc这个方法,因为desc代码里没有加锁,所以不需要拿到同一个锁后才能执行代码,desc依然执行,因此只对一个方法加锁相当于都没加锁。即A线程的add方法被调用,依然切换会切换到B线程,而B线程的没加锁的代码都会正常执行。对吧?。
之前把加锁理解成加锁的代码全部执行完成前,cpu不会给其他线程分配时间因此,这种理解是错的。
132020-02-07
相似问题