如何使线程等到子线程完成?

时间:2017-06-28 17:18:41

标签: java multithreading application-restart

我想在循环中重新启动Main,直到用户停止它。 我用main方法创建了一个新类,并在while(true)循环中调用main。 可悲的是,这没有带来预期的效果。 因为它没有等待另一个主要完成而只是重新启动直到我的ram已满且程序崩溃。

public class Main {

public static void main(String[] args) throws InterruptedException {
    boolean run=true;
    while(true) {
        Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                OldMain.main(args);

            }
        });

        t.start();
        t.join();
    }
}

如何使循环等待OldMain.main(args)完成?

1 个答案:

答案 0 :(得分:-1)

您可以使用CountDownLatch等待main方法等待所有其他线程完成。您可以在参数中配置数字所需的no.of线程。

示例:

public class Main {

    public static void main(final String[] args) throws InterruptedException {
        boolean run = true;
        CountDownLatch latch = new CountDownLatch(1);
        final MyClass myClass = new MyClass(latch);

        Thread t = new Thread(new Runnable() {

            @Override
            public void run() {
                myClass.doMyWork(args);
            }
        });

        t.start();
        latch.await();
        t.join();

    }

}

class MyClass {
    private CountDownLatch latch;

    public MyClass(CountDownLatch latch) {
        this.latch = latch;
    }

    public void doMyWork(String[] args) {
        for (int i = 0; i < 1000; i++) {
            System.out.println(i);
        }
        latch.countDown();
    }
}