簡體   English   中英

wait-notify和CountDownLatch之間的區別

[英]Difference between wait-notify and CountDownLatch

我需要一些幫助來理解使用CountDownLatch優於傳統的wait-notify的優點。 我認為notifyAll()確實做了同樣的事情,它似乎更容易使用(也許是因為熟悉)。

另外,來自CountDownLatch的wait()和await()有什么區別?

謝謝 !

編輯:我想我需要改寫我的查詢:

Await()根據文檔說:

除非線程被中斷,否則導致當前線程等待鎖存器倒計數到零。

對我來說很難看出wait()和await()之間的區別 - await()確實在封面下使用了wait(),而且當count到零時似乎有一個隱式的notifyAll()。

我的意思是,為什么我不應該簡單地使用wait-notifyAll()機制(使用我自己的計數器變量處理),而不是去CountDownLatch?

它們肯定不會做同樣的事情: CountDownLatch僅在事件計數達到0時發出信號並且它自動執行, wait-notify要求您保留自己的計數,如果您想要實現相同的行為。 實現相同的行為通常容易出錯,最好避免它(特別是如果您不熟悉並發編程)。 比較CountDownLatchwait-notify幾乎不是蘋果到橙子的比較,它更像是比較自動鑽和Allen扳手。

我不知道你是否使用過notifyAll()CountDownLatch ,但只有notifyAll()不會給你相同的行為,除非你已經計算了發生了多少事件。 CountDownLatch可能最適合執行固定數量的任務,並在您恢復執行其余程序之前等待完成這些任務。 當你有一定數量的線程(例如ThreadPool )執行固定數量的任務時,它會特別有用,但是你的線程比任務少,你必須重用它們。 使用CountDownLatch您可以輕松地等待所有任務完成。 我不知道你是如何使用notifyAll()來實現相同的行為的,但如果你向我們提供更多信息,我們可以解決兩者中哪一個是更好的選擇(肯定有些情況下waitNotify()更合適)。

關於wait()await()之間的區別,我對你有些失望! 查找文檔是任何問題的第一步:

http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html

await()CountDownLatch的實際函數,而wait()是從Object繼承的。 我建議您查看文檔以了解它們的用途。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM