2016-05-05 22 views
-1

正如我們所知道wait()notify()Object類中定義的,因爲顯示器將上設置Object不是該對象的特定線程,所以我的問題是,如果我們寫哪個線程將被通知

MyObject mo=new MyObject(); 
Thread t1=new Thread(c); 
Thread t2=new Thread(c); 
try { 
t1.wait(); 

c.notify(); 
}catch(Exception e){} 

如果我們使用上述對象引用調用通知,那麼將通知哪個線程線程t1或t2。

+0

沒有,因爲線程尚未啓動。無論如何,什麼是'C'? – Pang

+0

這沒有任何意義。 – shmosel

+0

如果你查閱文檔,你會發現你的答案,而不是甚至理解爲什麼你問或你的代碼是幹什麼的。 – EJP

回答

2

使用相同對象waitnotify。如果x是任何Object和線程t1執行此:

x.wait(); 

那麼當另一個線程以後使用該對相同Object

x.notify(); 

然後t1將被通知,因爲它的線程等待x。 (。這是假設沒有其他線程已經在同一個物體上做了wait如果有一個以上的線程等待,系統將挑選一個)

你的錯誤是在嘗試一個Thread對象使用wait

t1.wait(); 

這是合法的,因爲你可以wait()任何Object,和ThreadObject。但這是毫無意義的,而不是通常的做事方式。聲明一些用作兩個線程用於同步的監視器的對象更爲正常。但那個對象可以是任何東西。這可能是一個簡單的Object

Object synchronizePoint; 

但往往是一些其他的對象,是所有線程工作的主要對象之一,使其成爲一個方便的對象用於同步,而無需申報新。