线程终止顺序

时间:2014-08-02 11:48:42

标签: java multithreading

当我在java中学习多线程时,我开始知道线程没有执行顺序。 根据我的理解,下面的陈述是真的吗? 用户线程(不是守护程序线程)应在终止主线程之前终止。

我看过类似的链接:
if main method completes the execution, what happens to any long running thread?
When does the main thread stop in Java?

我有一个去除程序,请指正。

class ThreadDemo {  
  public static void main(String args[]) {      
    Thread t = new Thread(new Runnable(){  
            @Override  
            public void run() {  
                System.out.println("Within 'Child Thread' @ "+System.currentTimeMillis());                  
            }         
    }, "Child Thread");   

    //t.setDaemon(false);  
    t.start();  
    System.out.println(Thread.currentThread()+" thread is alive:"+Thread.currentThread().isAlive());  
    System.out.println(t+" thread is alive:"+t.isAlive());  

    System.out.println("'Main' thread exiting @ "+System.currentTimeMillis());     
  }  
}

在我的系统上输出到此程序的大多数时间是

'Main' thread exiting @ 1406971862950
Within 'Child Thread' @ 1406971862952

这是否意味着主线程在子线程之前退出?如果是,那为什么会发生这种情况?

2 个答案:

答案 0 :(得分:0)

这是真的。执行程序时,会创建main thread来执行main method。由于您在main中创建了另一个线程,因此创建的线程和主线程都将以并行方式执行,而不管彼此如何。

但是如果你需要你创建的线程来完成执行而不是主要完成执行jst在启动你的线程后添加followind代码。

t.join(); 

这会强制你的主线程停止,直到你创建的线程完成执行。

答案 1 :(得分:0)

守护程序线程是JVM在需要时自动提取的线程。垃圾收集器是其中之一。 主线程由用户拉出。所以它是一个非守护线程。

只有当所有非守护程序线程完成执行时,JVM才会关闭。它不会等待守护程序线程完成。