04-互斥锁

不能用账户余额this.balance和this.password做为锁对象。

这两个对象都是可变对象,一但对他们进行赋值就会变成新的对象,加的锁就失效了。不能把可变的对象当成一把锁

比如有线程A、B、C
线程A首先拿到balance1锁,线程B这个时候也过来,发现锁被拿走了,线程B被放入一个地方进行等待。
当A修改掉变量balance的值后,锁由balance1变为balance2.
线程B也拿到那个balance1锁,这时候刚好有线程C过来,拿到了balance2锁。
由于B和C持有的锁不同,所以可以同时执行这个方法来修改balance的值,这个时候就有可能是线程B修改的值会覆盖掉线程C修改的值

猜你喜欢

转载自www.cnblogs.com/bbsh/p/11678784.html