1. 程式人生 > >多執行緒程式設計入門(4):wait,notify方法使用注意事項

多執行緒程式設計入門(4):wait,notify方法使用注意事項

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處應該為同一個物件,即同一把鎖.