以Pausing a Thread爲例。如果我使用notifyAll
而不是通知,是否有任何副作用,是否有必要?通過使用notifyAll來恢復線程
0
A
回答
6
在那個例子中,它沒有任何區別,因爲只有一個線程正在等待。
notify
和notifyAll
之間的區別在於後者喚醒所有服務員,而不是一個。
0
如果您可以讓多方在對象上等待,則使用notifyAll而非通知非常重要。如果只有一個線程等待,那麼調用notify和notifyAll沒有區別。
1
在「Effective Java」第69項中,Bloch建議「始終使用notifyAll」。
-1
創建一個新的可運行。在運行方法中,「開始」倒數計時器正在等待,並且將不允許執行,除非在預定義時間內使用該鎖存器上的調用倒計時釋放。在這種情況下1.(自從開始傳遞1作爲併發否)
//修正答案。 //一個可運行的類。
public class WorkerThread implements Runnable
{
CountDownLatch start;
CountDownLatch end;
String name;
WorkerThread(CountDownLatch startLatch, CountDownLatch stopLatch)
{
this.start = startLatch;
this.end = stopLatch;
}
public void run()
{
try
{
start.await();
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
System.out.println("Will run when start is released ");
end.countDown();
}
}
//這是執行輔助線程的入口點方法。
public void initiateProcess (final int count) {
CountDownLatch start = new CountDownLatch(1);
CountDownLatch stop = new CountDownLatch(count);
for (int i = 0; i < count; i++)
{
new Thread(new WorkerThread(start, stop))
.start();
}
System.out.println("Go");
// This is where start latch is released. Now worked thread can complete its function.
start.countDown();
try
{
// Stop will wait until stop latch is countdowned to zero from count param. (see count param)
stop.await();
} catch (InterruptedException ex)
{
ex.printStackTrace();
}
System.out.println("Finished");
}
相關問題
- 1. Java線程通知()與notifyAll()
- 2. 線程notifyAll()
- 3. 線程notall後notifyall()
- 4. 通知單線程:notify,notifyAll或concurrent.locks.Condition?
- 5. notifyAll的()不會通知所有線程
- 6. 爲什麼notifyAll()在這種簡單情況下不能恢復其他線程?
- 7. C++ - 如何使用boost來恢復線程?
- 8. 通過按鍵暫停和恢復線程
- 9. 多線程HttpListern恢復睡眠線程
- 10. 暫停/恢復線程?
- 11. 暫停和恢復線程
- 12. C# - 通過使用線程
- 13. 如何恢復通過crosscast
- 14. 通過對數據恢復
- 15. 如何通過通知恢復應用程序
- 16. 通過通知欄恢復應用程序
- 17. 應用程式purshase恢復過程
- 18. 通過關閉分支來恢復丟失的有用更改
- 19. 使用subprocess.Popen恢復進程?
- 20. 處理線程池和等待notifyALL()
- 21. 通過在SharePoint 2010中恢復數據庫來創建測試應用程序
- 22. 如何恢復過程applicationDidBecomeActive
- 23. 使用git checkout來恢復文件 - 無論如何恢復它?
- 24. 通知和notifyAll的影響阻塞狀態的線程僅
- 25. 如何使用wait()和notifyAll()逐個運行線程?
- 26. 爲什麼在線程實例中不能使用notifyAll()?
- 27. 從通知恢復Android應用程序
- 28. 恢復應用程序時線程復位
- 29. Mysql通過存儲過程恢復數據庫
- 30. 如何通過在c#中使用線程來加緊工作?
我知道我是題外話,但它能夠更好地使用併發實用程序等待和通知。 – 2011-01-19 01:42:03
@ doc_180,然後向我展示一種常用的已知方法,即使用併發實用程序來暫停和恢復線程。 – 2011-01-19 05:13:43
你會比閱讀Doug Lea關於併發性的書更糟糕。無論如何,這裏是一個簡單的執行者和閂鎖樣本。代碼示例在下面的分開的答案。 – 2011-01-19 06:31:07