2013-09-05 23 views
1

Object類的方法wait()notify()用於進行線程間通信。當調用wait()時,用於同步的對象放棄它的鎖定,但是當調用notify時,直到同步塊完成纔會釋放鎖定。

那麼,notify()函數有什麼用?即使它不在那裏,同步塊會完成並釋放鎖定權限?在線程通信中使用Notify()

+1

你會如何喚醒等待中的對象? – rocketboy

+1

Java文檔非常詳細地描述它:「notify():喚醒正在等待該對象監視器的單個線程。」 – ArchiFloyd

+1

等待的線程有時可以在不通知的情況下重新激活。 – hemanth

回答

2

notify()負責喚醒等待的線程,即。從等待隊列中取出線程來運行隊列。這就是等待線程可以由調度程序調度。

+0

爲了更加準確,這裏使用的* term *應該是'thread'而不是'process' –

+0

@KuldeepJain我的不好,我更習慣於linux和進程和線程沒有多大區別。糾正我的答案 –

2

正在等待對對象鎖定的線程必須被通知他們想要鎖定的對象現在是空閒的,這就是notify()notifyAll()方法所做的。

2

java.lang.Object.notify()喚醒在該對象監視器上等待的單個線程。如果任何線程正在等待這個對象,則選擇其中一個線程來喚醒。這種選擇是任意的,並且由實施決定。線程通過調用其中一個等待方法來等待對象的監視器。

enter image description here

此方法應該僅由一個線程,它是此對象監視器的所有者被調用。一條線程以三種方式之一成爲對象監視器的所有者:

  • 通過執行該對象的同步實例方法。

  • 通過執行同步對象上的同步語句的主體

  • 對於Class類型的對象,通過執行該類的同步靜態方法 。