2014-05-08 63 views
-2

當調用super.wait(),類似下面 -當調用wait()的超級

synchronized (this) 
     { 
     while (true) 
     { 
      try 
      { 
      super.wait(); 
      } 
      catch (InterruptedException e) 
      { 
      return; 
      } 

     } 
} 
+2

在我們回答您需要ATLEAST說,你到底想達到什麼目的? –

+0

好吧,這是一個奇怪的構造,很可能是一個錯誤。 但它仍然有效。 爲何全部倒票? – Yuri

+0

嗯,我在這篇文章中看到了@bdonlan的答案之一[link](http://stackoverflow.com/questions/6114320/java-monitors-how-to-know-if-waitlong-timeout-ended逐超時或逐通知)。這是我第一次看到等待被超級引用。所以出於好奇,問了這個問題。 – user3172924

回答

2

Object.wait()宣佈最終的,不能被重寫。 所以super.wait()始終意味着只是wait()但稍長一點。

+0

沒有嘗試覆蓋原始海報的代碼。 –

+0

我在說,在這種情況下,wait和super.wait是等價的,因爲wait()總是在超類中。 – Yuri

+0

你是什麼意思「......但有點長」? –

1

wait()必須在其上它​​否則會導致java.lang.IllegalMonitorStateException

同一對象上調用它應該是this.wait()

+0

「這個」和「超級」都指的是同一個對象。 this.foo()和super.foo()之間的區別僅在對象的類和類的祖先的類中定義了foo()方法時才起作用。然後「超級」允許調用祖先的函數版本。正常的用例是當你將this.foo()定義爲繼承函數的包裝時。 –