Java线程

下面是一个死锁的模拟

 

我觉得要对死锁的概念有一个很深的了解,在这里我总结一下:

   死锁产生的条件我觉得是这样的:一个线程拿到了A的锁,再拿到B的锁就可以完成了;而另一个线程拿到了B的锁,再拿到A的锁就可以完成了,但是第一个线程拿着A的锁不放,而第二个线程拿着B的锁不放,你等我,我等你,就这样出现了死锁。

 

下面这是一道面试题

 

问调用m2方法,输出地b是多少?

答案是:1000

有的人可能会有疑问,m1中不是加了锁了吗,再这里我发表一下我自己的看法:

   当有多个方法操作资源的时候,要使得访问有序进行,也就是同步进行,那么必须对所有访问它的方法都进行同步,这样地话确保了资源的顺序访问,第一个访问的拿到锁直到释放后后序的方法才能够拿到锁访问资源。

   对于上面的两个方法m1做了同步,m2没做同步,那么m2就不会遵守上面的规则,它不在游戏规则之内,它的访问不受任何人的干扰,没必要按照你设定的规则来访问资源,当你拿到资源的锁的时候,它照常使用资源,并且拿到资源锁并不是说明该资源就不能被访问了,而是说明你有访问我的权利。

   所以要想真正的对资源进行同步访问,那么对所有访问资源的访问都必须同步,让它们处于游戏规则之内。

  

 

上面写得有错误的地方,希望各位指出

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值