为了账号安全,请及时绑定邮箱和手机立即绑定

为什么这种情况不会造成程序死锁?

为什么这种情况不会造成程序死锁?

大佬金 2018-01-23 07:24:12
创建一个含有int属性的类Temp,创建一个实现Runnable接口的类Demo1,其中有boolean类属性flag和静态属性Temp类的o1和o2,写成静态属性是为了在实例不同Demo1对象的时候调用共同的o1和o2对象。Demo1中有run方法,run方法中根据flag值的不同执行不同的语句。在测试的时候,创建两个线程并对其flag赋不同的值。图中的run方法中是synchronized一个对象之后访问另一个对象,也就是synchronized一个对象并访问另一个对象才可以结束线程。那么这样的代码为什么不会造成死锁呢?创建两个线程flag值相反的t1和t2,t1先synchronized对象o1,之后sleep,这时候t2执行,synchronized对象o2,之后sleep,之后t1sleep结束,要求访问对象o2否则线程不会结束也就不会释放o1,但是此时o2被t2锁定,同时t2要求访问对象o1否则线程不会结束也就不会释放o2。当一个对象被一个线程synchronized的时候是不允许其他线程访问的!所以我认为图中代码会死锁。但是为什么实际运行的时候并不会死锁呢?
查看完整描述

1 回答

?
tanhouyusheng

TA贡献94条经验 获得超59个赞

单步调试看看,我感觉你说的对

查看完整回答
反对 回复 2018-01-23
  • 1 回答
  • 0 关注
  • 1177 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信