Для примера у меня есть всего 5 нитей, основной поток (A) и 04 других подписок (B, C, D, E). Я хочу, чтобы поток E должен был дождаться завершения работ B, C. Я намерен использовать join(), но кажется, что основной поток также будет заблокирован. Мне нужен основной поток, и поток D может продолжать работать, пока поток E ждет поток B и C.
Я не знаю, как я могу реализовать это правильно. Было бы здорово, если кто-то может помочь.
Большое спасибоThreading waiting in java
ответ
Вы можете использовать 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() { ... }
}
Почему расширение 'Object' явно? – Mordechai
@MouseEvent. По умолчанию этот класс расширяет класс Object для наследования его свойств. –
Много возможностей, таких как CountDownLatch, или вы можете поместить join()
вызовы в run()
метод Thread Е.
Лучший способ, которым я могу думать, чтобы передать объект Threads B , C и E и дождаться, пока оба B и C не закончатся.
В Thread E вы должны иметь 2 линии ожидания:
lockObj.wait();
lockObj.wait();
и обе нити B и C должны заканчиваться lockObj.notify();
Я не проверял это, но теоретически она должна работать.
- 1. .NET Threading & Locks & Waiting
- 2. Threading in java
- 3. GUI threading in java
- 4. Threading in Java
- 5. muilti threading in java
- 6. Threading and synchronization in Java
- 7. Java Threads Busy Waiting
- 8. using threading in pygame
- 9. Threading in application programming
- 10. Threading in Java: как заблокировать объект?
- 11. GUI Threading in Java (и SwingUtilities)
- 12. Threading in javax.websockets/Tyrus
- 13. javascript/jquery loop result in busy waiting
- 14. Threading in BizTalk Orchestration
- 15. threading in asp.net
- 16. Threading in Android
- 17. Multi Threading in C#
- 18. Threading in XNA
- 19. C++ threading in linux
- 20. Threading in Spring
- 21. threading in pygame
- 22. Threading in C# issue
- 23. background threading in android
- 24. Threading In Classes
- 25. Threading in Eclipse
- 26. Threading in C#
- 27. Threading in WPF
- 28. Threading in PyQt
- 29. Threading in Windows Forms
- 30. Threading in .net
Используйте [ 'CountDownLatch'] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html) – MadProgrammer
Вы можете использовать' FutureTask' –
B, C , D, E запускаются из A? –