开发者

termination of program on main thread exit?

I have two threads: the main thread and a thread generated from the main thread.

When the main thread exits, will the whole program t开发者_StackOverflow社区erminate?


No.

Java programs terminate when all non-daemon threads finish.

The documentation states:

When a Java Virtual Machine starts up, there is usually a single non-daemon thread (which typically calls the method named main of some designated class). The Java Virtual Machine continues to execute threads until either of the following occurs:

  • The exit method of class Runtime has been called and the security manager has permitted the exit operation to take place.
  • All threads that are not daemon threads have died, either by returning from the call to the run method or by throwing an exception that propagates beyond the run method.

If you don't want the runtime to wait for a thread, call the setDaemon method.


No. Main Thread is Non-Demon thread, unless your child thread is demon thread, Program will not terminate even if main thread finishes before child thread. You can check that using below sample program.

public class app {

public static void main(String[] args) throws InterruptedException {
    app2.mt=Thread.currentThread();
    app2 t = new app2();
    t.start();
    System.out.println("Main starts");
    Thread.sleep(2000);
    System.out.println("Main ends");

  }
}

class app2 extends Thread{
static Thread mt;
public void run(){
    try {
        mt.join();//waits till main thread dies.
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    System.out.println("child thread");
  }
}
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜