System.exit(status);
Runtime.getRuntime().halt(status)
这两个都表示系统退出,那么他们有什么区别呢?
针对System.exit(status)解释如下:
Terminates the currently running Java Virtual Machine. Theargument serves as a status code; by convention, a nonzero statuscode indicates abnormal termination
针对Runtime.getRuntime().halt(status)解释如下:
Forcibly terminates the currently running Java virtual machine. Thismethod 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);}
结论:
所有的线程都没有执行