在执行下一行之前,main方法是否等待所有线程完成?

时间:2013-05-07 18:38:41

标签: java multithreading

在Java中,如果我有一个从构造函数创建线程的类(通过调用该类的某些函数),我在main方法中创建该类的对象。主方法是等待所有线程完成还是继续到下一行?

例如:

public static void main(String[] args)  {
    WorksWithThreads obj = new WorksWithThreads ( );

    //does something else - does this line happen after all the 9 threads finished their job? 
}

class WorksWithThreads(){
    public WorksWithThreads(){
        for(int i=0;i<9;i++)
            WithThread tread= new WithThread();
    }

    private static class WithThread extends Thread {

        public WithThread () {
            run();
        }

        public void run(){
            //does something
        }
    }

}

我希望我不会太混乱..提前谢谢你.. 什兰

3 个答案:

答案 0 :(得分:3)

如果你实际上产生了新的线程,你的主要方法将在完成产生后立即继续(但在线程结束之前,假设它们运行一段时间)

但是你没有产生线程。您正在创建Thread类的实例。要实际生成新线程,您必须调用start。像你一样调用run()只是一个普通的方法调用,处理只有在完成后才会继续。

您可能希望使用official tutorial about this topic

答案 1 :(得分:1)

没有。线程的重点是它们不会停止生成它们的线程的执行。 main()一旦完成所有线程的产生,WorksWithThreads将继续执行,但它产生的线程将与main的其余部分同时执行。

答案 2 :(得分:0)

是的,它会在创建9个线程后运行。你甚至没有启动那9个线程。所以在执行它们之前,将执行main中的下一行