我必须运行多个线程|| ly并执行所有这些线程主线程后继续。 例如,我有一个主线程和3个子线程,我需要
run main thread
pause main thread
run all 3 sub threads ||ly
after complition resume main thread
我创建了一个类extends Thread
并调用了所有这些线程的start方法,但它并没有解决我的问题。
我的代码:
for (MyThread myThread : myThreads) {
myThread.start();
}
感谢您的帮助。
答案 0 :(得分:3)
尝试使用Thread.join();
public class ThreadDemo implements Runnable {
public void run() {
Thread t = Thread.currentThread();
System.out.print(t.getName());
//checks if this thread is alive
System.out.println(", status = " + t.isAlive());
}
public static void main(String args[]) throws Exception {
Thread t = new Thread(new ThreadDemo());
// this will call run() function
t.start();
// waits for this thread to die
t.join();
System.out.print(t.getName());
//checks if this thread is alive
System.out.println(", status = " + t.isAlive());
}
}
输出:
Thread-0, status = true
Thread-0, status = false
以下是stack-over-flow link供参考。
答案 1 :(得分:1)
忘记'暂停'线程。你的日程安排应该是
那么你如何等待线程完成?您需要一个同步机制。这些通常是OS级别的“标志”,称为信号量,但java库为您提供了几种方法。您将从this series中获得很多,特别是part 2: Thread Synchronization
答案 2 :(得分:0)
您可以在线程上调用join()。假设你的线程在myThreads中并且你不希望你的线程可以中断
// ...
// create threads and start them
// ...
for (Thread t : myThreads) {
while (t.isAlive()) {
try {
t.join();
} catch (InterruptedException e) { }
}
}
如果它应该是可以中断的:
// ...
// create threads and start them
// ...
for (Thread t : myThreads)
t.join();
答案 3 :(得分:0)
CountDownLatch是比Thread.join
更灵活的机制。它完全符合你的要求。首选java.util.concurrent.*
而不是旧的内置java技术。
<强>优点:强>
getCount()
方法,可用于实现进度条。 join
更复杂。await(long timeout, TimeUnit unit)
可以被认为比join(long millis)