当一个线程调用System.exit()时会发生什么?

时间:2011-04-16 20:17:07

标签: java multithreading

究竟发生了什么?线程是否停止,或程序是否停止?那我怎么能停止主线程呢?

2 个答案:

答案 0 :(得分:6)

我假设您的意思是System.exit(或Runtime.exit)调用,无论哪个线程调用它,它都会终止整个JVM。

单个线程仅在其“run”方法终止时停止,而在主线程的情况下,这是一个主要方法;但是,当此线程停止时,JVM也会停止,除非有任何非daemon线程在运行。因此,要在不终止JVM的情况下“停止”主线程,您可以在main方法终止之前创建并启动另一个线程。

public class SleepThread extends Thread {
  public static void main(String args[]) {
    Thread t = new SleepThread();
    t.start();
    System.err.println("Main thread exiting.");
  }

  @Override
  public void run() {
    System.err.println("Thread running.");
    try {
      Thread.sleep(5 * 1000); // 5 seconds
    } catch (InterruptedException ie) {
      System.err.println("INTERRUPTED");
    }
    System.err.println("Thread exiting.");
  }
}

答案 1 :(得分:3)

return方法run()时,该帖子会停止。

主线程只是另一个线程(尽管有些特殊),您可以从main()返回,也可以调用System.exit()来停止JVM。

编辑:如上面的评论中所述,上面有点混乱。

请注意,通过从主机线程返回来停止主线程不会自动停止其他线程,并且JVM将继续运行它们直到它们停止或您终止JVM进程。