亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

java線程死鎖問題

java線程死鎖問題

superkrissV 2015-02-15 21:50:12
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)上面是運行結果,編譯沒有問題,求解釋。
查看完整描述

1 回答

已采納
?
藍胖子Torres

TA貢獻6條經驗 獲得超4個贊

空指針了,要把o1和o2先實例化,才能給它加鎖

查看完整回答
1 反對 回復 2015-02-15
  • superkrissV
    superkrissV
    public static Object o1 = new Object(); public static Object o2 = new Object(); 實例化對象之后,編譯運行,過了sleep的時間后結果就出來了,并沒有死鎖,這是為什么?
  • 藍胖子Torres
    藍胖子Torres
    應為你的 o1和o2定義在了線程的內部,所以相當于線程自己的變量,要對一個全局對象加鎖才能互斥
  • superkrissV
    superkrissV
    非常感謝!
  • 1 回答
  • 0 關注
  • 2033 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號