![](/img/trans.png)
[英]Is there a way to keep main thread in sleep mode until all my threads finish their execution in java?
[英]Calling sleep on one thread is sleeping all my threads (Java)
我有一組工作人員,每個工作人員都有自己的線程,如下所示:
for (int i = 0; i < numWorkers; i++)
{
workers.addElement(new Worker(this, i));
Thread t = new Thread(workers.elementAt(i));
workerThreads.addElement(t);
t.start();
}
每個工作程序的向量中都有其編號,當我需要停止線程時,請執行以下操作:
fp.workerThreads.elementAt(number).sleep(move.amount*1000);
但是,即使我認為我在單個線程上調用sleep,也正在停止向量中的所有工作線程。 有任何想法嗎? 謝謝!
因此,您要在此處執行的操作是從主線程調用您的一個工作對象上的sleep。
fp.workerThreads.elementAt(number).sleep(move.amount*1000);
如果您必須在工作線程之一中睡眠。 您必須確保要從嘗試進入睡眠的線程中調用Thread.sleep()方法。 如您所見,Thread.sleep是一個靜態方法,它不在乎您在哪個線程對象上調用sleep,而是在哪個線程上是當前線程。 我希望這有幫助。
從技術上講這不是錯誤的 ,但卻是可怕的:
Thread t = ...;
...
t.sleep();
這不是“錯誤的”,因為編譯器將允許您執行此操作。 這很可怕,因為它具有誤導性:程序員似乎認為sleep()調用將使t線程化。 但這根本不是真的。
IMO是Java語言的設計師在讓您編寫代碼時犯下的最大錯誤之一。 如果您的程序要調用sleep *,請按照以下步驟操作:
Thread.sleep();
*但是為什么要全部調用sleep()? 除非出於教育目的,否則調用Thread.sleep()的Java程序要么包含重新發明的輪子,要么由於某些不適當的原因而處於休眠狀態。 (提示:如果您的程序有同步問題,則無法使用sleep()進行修復。您所能做的就是使問題在測試期間更不可能被發現,因此在現場發生的可能性更大。當它最終發生時。)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.