我沒有在multithreading
工作過,加入和等待,通知方法有什麼區別?是否僅限於獲得lock
的差異,並避免其他threads
訪問它或者是否存在其他用例?多線程加入和等待之間的區別,通知
爲什麼我應該去爲multithreading
wait
和notify
時join
可用於thread
執行完畢?
如果有實時的例子已經提供
我沒有在multithreading
工作過,加入和等待,通知方法有什麼區別?是否僅限於獲得lock
的差異,並避免其他threads
訪問它或者是否存在其他用例?多線程加入和等待之間的區別,通知
爲什麼我應該去爲multithreading
wait
和notify
時join
可用於thread
執行完畢?
如果有實時的例子已經提供
的join()方法等待線程死亡這將是有益的。 wait()和notify()用於線程間通信。換句話說,這些方法會阻塞線程,直到滿足某些條件。
方法join
(的Thread
類)等待線程死亡:
等待該線程死亡。
方法wait
,notify
,notifyAll
不相關的一個線程的執行結束。
方法wait
:
造成當前線程等待,直到其他線程調用notify()方法或此對象的notifyAll的()方法。
https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#wait()
方法notify
和notifyAll
用來喚醒一個沉睡的線程:
喚醒在此對象監視器上等待的單個線程。
wait
的與notify
的一個常見用途是訪問共享資源。 當資源不可用時,消費者在顯示器上等待。 當生產者創建資源時,它通知(或notifyAll)喚醒等待該資源的線程(或多個線程)。
連接的常見用法是阻止主線程,直到配置線程完成其活動,然後再繼續。
join(
):等待此線程死亡。
join方法允許一個線程等待另一個線程的完成。如果T是一個Thread對象,它的線程當前執行,
t.join();
導致當前線程,直到T的線程終止暫停執行。
wait()
:導致當前線程等待,直到另一個線程調用此對象的notify()方法或notifyAll()方法。
notify()
:喚醒正在等待該對象監視器的單個線程。如果任何線程正在等待這個對象,則選擇其中一個線程來喚醒。
notifyAll()
:喚醒在該對象監視器上等待的所有線程。線程通過調用其中一個等待方法來等待對象的監視器。
請參閱下面的帖子瞭解更多詳情。
Difference between wait() and sleep()
Difference between Synchronized block with wait/notify and without them?
例子:
此實現使用空調上this.wait呼叫的環this.isAlive。由於線程終止this.notifyAll方法調用了 。建議應用程序不要在Thread實例上使用wait,notify或者notifyAll。
等待Thread
終止(和清理)的正確方法是join()
。
的文檔建議您不使用wait()
,notify()
或notifyAll()
上Thread
實例。
恕我直言,這是一個錯誤的增加一個顯示器java.lang.Object
。這與大多數類完全無關,膨脹實現並導致不適當的使用。
聲明方法的能力也是一個錯誤。它傾向於延長關鍵部分,並且如果確實需要(不是這樣),則可以將其限制在某些類別(或將其實現爲接口的類別),而不是膨脹類別層次結構。
[等待(長時間超時)和連接(長時間毫秒)之間的區別?](http://stackoverflow.com/questions/8818721/difference-between-waitlong-timeout-and-joinlong-millis) – aUserHimself