多執行緒程式設計入門(4):wait,notify方法使用注意事項
阿新 • • 發佈:2019-02-01
1 問題
2 程式碼
public class WaitAndNotify1 { public static void main(String[] args) { Thread t1=new Thread(new Runnable(){ @Override public void run(){ System.out.println("Thread-1"); try { synchronized (this) { wait(); System.out.println("Thread-1 after wait"); } } catch (InterruptedException e) { e.printStackTrace(); } } }); Thread t2=new Thread(new Runnable(){ @Override public void run(){ try { Thread.sleep(4000); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("Thread-2"); synchronized (this) { notify(); System.out.println("Thread-2 after notify"); } } }); t1.start(); t2.start(); } }
3 解答
4 後記
當呼叫wait方法時出現異常時(IllegalMonitorStateException),這時請注意檢視官方api說明文件,而不是立馬baidu或者google.應該仔細理解每句話的含義加以實踐證明.
5 修改之後的程式碼
圖中1,2,3,4處應該為同一個物件,即同一把鎖.