例如我有5個線程總數,主線程(A)和04個其他子線程(B,C,D,E)。我想要的是線程E需要等到線程B,C完成他們的工作。我打算使用join(),但似乎主線程也會被阻塞。我需要主線程,線程D可以在線程E正在等待線程B和C時繼續運行。
我不知道如何以正確的方式實現此功能。如果有人能提供幫助,那將會很棒。
非常感謝您在java中的線程等待
0
A
回答
1
的run()
方法可以使用CountDownLatch。
類CountDownLatch
java.lang.Object
java.util.concurrent.CountDownLatch
public class CountDownLatch
extends Object
一個同步輔助,允許一個或多個線程等待,直到在其他線程正在執行的一組操作完成。
例如:
下面是一個完成信號,可以讓駕駛者要等到所有工人已經完成 -
class Worker implements Runnable {
private final CountDownLatch startSignal;
private final CountDownLatch doneSignal;
Worker(CountDownLatch startSignal, CountDownLatch doneSignal) {
this.startSignal = startSignal;
this.doneSignal = doneSignal;
}
public void run() {
try {
startSignal.await();
doWork();
doneSignal.countDown();
} catch (InterruptedException ex) {} // return;
}
void doWork() { ... }
}
+0
啓動爲什麼明確擴展Object? – Mordechai
+0
@MouseEvent - 默認情況下,此類擴展Object類以繼承其屬性。 –
0
許多可能性,如CountDownLatch,或者你可以把join()
電話成線E.
0
我能想到的最好的辦法是將對象傳遞給線程乙,C和E並等待,直到B和C都完成。
在線程Ë你應該有2個等待行:
lockObj.wait();
lockObj.wait();
而且兩者線程B和C應lockObj.notify();
我沒有測試爲此,但在理論上它應該工作。
相關問題
- 1. 在java中喚醒等待線程
- 2. Java Worker線程等待
- 3. Java線程等待值
- 4. Java:線程不會等待
- 5. Java等待線程完成
- 6. Java多線程等待線程完成
- 7. 等待Java中的線程完成
- 8. java等待池中的所有線程
- 9. 在Android中線程等待
- 10. 等待線程
- 11. 等待的線程
- 12. Java的等待 - 爲多線程問題
- 13. 多線程 - 等待線程
- 14. 等待Java線程池中的線程子集
- 15. 等待過程中的Java
- 16. 線程在C「等待父」
- 17. 線程和正在等待
- 18. Android線程正在等待
- 19. 線程正在等待ThreadPoolExecutor
- 20. 讓線程等待
- 21. 多線程:等待在主線程
- 22. java線程等待並自動喚醒
- 23. Java線程等待並通知
- 24. Java Callable - >開始線程並等待
- 25. Java - 無法通知等待線程?
- 26. Java swing工作線程等待EDT
- 27. Java:等待線程異常通知
- 28. Java線程:等待通知機制ArrayList
- 29. 在Java中等待
- 30. 如何等待一組線程'真的'在java中完成?
使用['CountDownLatch'](http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html) – MadProgrammer
您可以使用'FutureTask' –
B,C ,D,E都是從A發起的? –