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

http://img3.mukewang.com/5a66715d000114f504620802.jpg

创建一个含有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的时候是不允许其他线程访问的!所以我认为图中代码会死锁。但是为什么实际运行的时候并不会死锁呢?

大佬金
浏览 1178回答 1
1回答

tanhouyusheng

单步调试看看,我感觉你说的对
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java