Java 1.5 +
A班与B班有何不同?
public class A {
public static void main(String args[]) {
System.out.println("Ending..");
System.exit(0);
}
}
public class B {
public static void main(String args[]) {
System.out.println("Ending..");
}
}
如果System.exit(0)
或System.exit(1)
是要执行的程序的最后一个语句,那么A类和B类在程序执行的各个方面都会表现相同吗?
据我所知,按照惯例,非零状态代码表示异常终止。
答案 0 :(得分:1)
Class A
“明确”关闭。这意味着如果有任何非守护进程线程仍在运行,它们将被显式停止(被告知,而不是消失)。
Class B
“隐式”关闭,看看主线程是如何在这种情况下运行的唯一非守护程序线程,并且在print语句之后,它将结束。
查看Thread#setDaemon(boolean)的文档:“当运行的唯一线程都是守护程序线程时,Java虚拟机退出。”
最后,应用程序关闭,所以我猜它并没有真正有所作为,除了第一个被告知关闭,第二个“死掉”。最好让线程消失,而不是被告知。这是一个额外的步骤;您也不需要在exit(int)
方法中执行任何额外的语句。可以在此处找到该方法的代码:GrepCode: Shutdown#exit(int)
答案 1 :(得分:0)
System.exit()
明确指定退出代码,则默认退出代码为0
。File.deleteOnExit()
来电。Systeme.exit()
会立即终止您的程序,即使其他非守护程序线程仍在运行。如果ClassB
这些线程和您的程序将继续运行,直到所有非守护程序线程退出。