System.exit(status);
Runtime.getRuntime().halt(status)
这两个都表示系统退出,那么他们有什么区别呢?
针对System.exit(status)解释如下:
Terminates the currently running Java Virtual Machine. The
argument serves as a status code; by convention, a nonzero status
code indicates abnormal termination
针对Runtime.getRuntime().halt(status)解释如下:
Forcibly terminates the currently running Java virtual machine. This
method never returns normally.
具体的代码测试如下:
用户自定义线程:
class UserThread implements Runnable {
@Override
public void run() {
System.out.println("***************UserThread start********");
try {
Thread.sleep(1 * 1000l);
System.out.println("***************UserThread end********");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
针对System.exit(status)测试代码:
public static void main(String[] args) throws Throwable {
for (int i = 0; i < 10; i++) {
Thread t = new Thread(new UserThread());
Runtime.getRuntime().addShutdownHook(t);
}
System.exit(1);
}
结果:
所有的线程都执行完成之后才会退出
针对Runtime.getRuntime().halt(status)测试如下:
public static void main(String[] args) throws Throwable {
for (int i = 0; i < 10; i++) {
Thread t = new Thread(new UserThread());
Runtime.getRuntime().addShutdownHook(t);
}
Runtime.getRuntime().halt(1);
}
结论:
所有的线程都没有执行