2014-09-25 165 views
1

正如我的理解,如果我那麼線程:什麼等待()其實是指Java?我會等待還是等待?

  • 當我打電話notify()/notifyAll()這意味着意味着我將信號發送到另一個線程其 等待在該對象的監視器上。我對嗎?

  • 但是wait()的含義是什麼?

    我是否發信號給其他線程等待,以便我可以完成我的工作?

    我聲明我會等待,你做你的工作,並告訴我你什麼時候完成。

我對線程一點概念

+2

你等着,有人通知你的東西... – MadProgrammer 2014-09-25 06:06:50

+1

花些時間[課:併發]閱讀(http://docs.oracle.com/javase/tutorial/essential/併發/),不要無所顧忌地嘗試一些測試... – MadProgrammer 2014-09-25 06:08:00

+1

後者。但是這可以在關於這個主題的任何文檔中閱讀,包括[關於'wait()']的API文檔(http://docs.oracle.com/javase/8/docs/api/java/lang/Object.html #等 - )本身。 – Seelenvirtuose 2014-09-25 06:09:15

回答

3

否,則表示要等待通知。

由於每Java docs(我的重點):

導致當前線程等待,直到另一個線程調用notify()方法或對象的notifyAll的()方法。

+0

然後我有點困惑。假設有一個調用通知一個對象,我不是在等待那個特定的對象監視器,但我正在處理該對象。這是一種有效的情況嗎?如果是的話,它會受到行爲的影響嗎? – Saif 2014-09-25 06:16:12

+0

如果你想我可以用這部分更新我的問題。 – Saif 2014-09-25 06:16:31

+1

兩個線程都需要使用相同的監視器對象才能工作。如果某人在不相關的對象上調用「notify」,您將繼續等待。 – Thilo 2014-09-25 06:18:34

1

這意味着「我宣佈我會等待,你做你的工作,並告訴我你什麼時候完成。」

文件說,

造成當前線程等待,直到其他線程調用notify()方法或此對象的notifyAll的()方法。換句話說,這個方法的行爲就好像它只是執行呼叫等待(0)一樣。 當前線程必須擁有該對象的監視器。線程釋放此監視器的所有權,並等待另一個線程通知對通知方法或notifyAll方法的調用,以便通知通過此對象監視器等待的線程喚醒。該線程然後等待,直到它可以重新獲得監視器的所有權並恢復執行。

See this link

+0

'wait()'不_declare_什麼。它只是等待。 – 2014-09-25 12:46:11