public?class?TestDeadLock?implements?Runnable?{
????public?static?int?flag?=1;
????public?static?Object?o1;
????public?static?Object?o2;
????@Override
????public?void?run()?{
????????//?TODO?Auto-generated?method?stub
????????System.out.println("flag?=?"+flag);
????????if(flag?==?1){
????????????synchronized(o1){
????????????????try?{
????????????????????Thread.sleep(5000);
????????????????}?catch?(Exception?e)?{
????????????????????//?TODO?Auto-generated?catch?block
????????????????????e.printStackTrace();
????????????????}
????????????}
????????????synchronized?(o2)?{
????????????????System.out.println("1");
????????????}
????????}
????????if(flag?==?0){
????????????synchronized?(o2)?{
????????????????try?{
????????????????????Thread.sleep(5000);
????????????????}?catch?(Exception?e)?{
????????????????????//?TODO?Auto-generated?catch?block
????????????????????e.printStackTrace();
????????????????}
????????????????synchronized?(o1)?{
????????????????????System.out.println("0");
????????????????}
????????????}
????????}
????}
????public?static?void?main(String[]?args)?{
????????TestDeadLock?td1?=?new?TestDeadLock();
????????TestDeadLock?td2?=?new?TestDeadLock();
????????td1.flag?=?1;
????????td2.flag?=?0;
????????Thread?t1?=?new?Thread(td1);
????????Thread?t2?=?new?Thread(td2);
????????t1.start();
????????t2.start();
????}
}flag = 0Exception in thread "Thread-0" Exception in thread "Thread-1" flag = 0java.lang.NullPointerException?? ?at Thread.TestDeadLock.run(TestDeadLock.java:26)?? ?at java.lang.Thread.run(Unknown Source)java.lang.NullPointerException?? ?at Thread.TestDeadLock.run(TestDeadLock.java:26)?? ?at java.lang.Thread.run(Unknown Source)上面是運行結(jié)果,編譯沒有問題,求解釋。
java線程死鎖問題
superkrissV
2015-02-15 21:50:12