下面是一个死锁的模拟
我觉得要对死锁的概念有一个很深的了解,在这里我总结一下:
死锁产生的条件我觉得是这样的:一个线程拿到了A的锁,再拿到B的锁就可以完成了;而另一个线程拿到了B的锁,再拿到A的锁就可以完成了,但是第一个线程拿着A的锁不放,而第二个线程拿着B的锁不放,你等我,我等你,就这样出现了死锁。
下面这是一道面试题
问调用m2方法,输出地b是多少?
答案是:1000
有的人可能会有疑问,m1中不是加了锁了吗,再这里我发表一下我自己的看法:
当有多个方法操作资源的时候,要使得访问有序进行,也就是同步进行,那么必须对所有访问它的方法都进行同步,这样地话确保了资源的顺序访问,第一个访问的拿到锁直到释放后后序的方法才能够拿到锁访问资源。
对于上面的两个方法m1做了同步,m2没做同步,那么m2就不会遵守上面的规则,它不在游戏规则之内,它的访问不受任何人的干扰,没必要按照你设定的规则来访问资源,当你拿到资源的锁的时候,它照常使用资源,并且拿到资源锁并不是说明该资源就不能被访问了,而是说明你有访问我的权利。
所以要想真正的对资源进行同步访问,那么对所有访问资源的访问都必须同步,让它们处于游戏规则之内。
上面写得有错误的地方,希望各位指出