2012-11-27 84 views
0
void waitForSignal(){ 
    Object ob =new Object(); 

    synchronized (Thred.currentThread()) { 
     try { 
      ob.wait(); 
      ob.notify(); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
    } 
} 

此方法拋出IllegalMonitorStateException。有人可以解釋爲什麼如此。此代碼可以拋出IllegalMonitorStateException

在此先感謝

回答

4

你只應該是你獲得的對象上調用wait鎖定。

在你的代碼中,你有Thread.currentThread()的鎖,但是你在ob上調用它,這會拋出IllegalMonitorStateException

所以,你應該寧可更改同步塊: -

synchronized (ob) { 

} 
1

你要的對象同步你正在等待:

synchronized (ob) { 
     try { 
      ob.wait(); 
      ob.notify(); 
     } catch (InterruptedException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
0

如果連你IllegalMonitorException固定您的問題類似

void waitForSignal() { 
    Object ob = new Object(); 
    synchronized (ob) { 

您的代碼將無法使用。在你的代碼中,每個線程創建一個新的鎖,在方法外部不可見。沒有其他線程通知等待線程的機會。

相關問題