同时运行多个线程然后运行主线程

时间:2013-08-12 12:31:10

标签: java multithreading

我必须运行多个线程|| 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();
}

感谢您的帮助。

4 个答案:

答案 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)

忘记'暂停'线程。你的日程安排应该是

  1. 在X线程上启动X操作
  2. 等待所有线程完成
  3. 处理结果(如果有的话)
  4. 那么你如何等待线程完成?您需要一个同步机制。这些通常是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技术。

<强>优点:

  1. 使用CDL处理单个对象而不是一堆线程。这可以简化代码。
  2. 它有一个getCount()方法,可用于实现进度条。 join更复杂。
  3. await(long timeout, TimeUnit unit)可以被认为比join(long millis)
  4. 更舒服