说到 java.lang.System.exit()
这个方法,咱们先看下 JDK8 的 API 中怎么说
为方便大家分析,我给粘下来
public static void exit(int status)
Terminates the currently running Java Virtual Machine. The argument serves as a status code; by convention, a nonzero status code indicates abnormal termination.
This method calls the exit method in class Runtime. This method never returns normally.
The call System.exit(n) is effectively equivalent to the call:
Runtime.getRuntime().exit(n)
Parameters:
status - exit status.
Throws:
SecurityException - if a security manager exists and its checkExit method doesn't allow exit with the specified status.
See Also:
Runtime.exit(int)
System.exit(int status)
的作用是:
直译:终止当前正在运行的Java虚拟机。参数用作状态代码;按照惯例,非零状态代码表示异常终止。此方法在类运行时调用exit方法。此方法从不正常返回。
再看下源码注释
/**
* Terminates the currently running Java Virtual Machine. The
* argument serves as a status code; by convention, a nonzero status
* code indicates abnormal termination.
* <p>
* This method calls the <code>exit</code> method in class
* <code>Runtime</code>. This method never returns normally.
* <p>
* The call <code>System.exit(n)</code> is effectively equivalent to
* the call:
* <blockquote><pre>
* Runtime.getRuntime().exit(n)
* </pre></blockquote>
*
* @param status exit status.
* @throws SecurityException
* if a security manager exists and its <code>checkExit</code>
* method doesn't allow exit with the specified status.
* @see java.lang.Runtime#exit(int)
*/
public static void exit(int status) {
Runtime.getRuntime().exit(status);
}
也就是说,该方法用来结束当前正在运行中的java虚拟机。
public static void exit(int status)
status 为 0
:表示正常退出程序,也就是结束当前正在运行中的java虚拟机。
status 为 1 或 -1 或 任何其他非零值
:表示非正常退出当前程序。
注意:此方法不会返回任何值。
正常退出和非正常退出具体是什么个情况?
答:正常退出
是指如果当前程序还有在执行的任务,则等待所有任务执行完成以后再退出;非正常退出
是只要时间到了,立刻停止程序运行,不管是否还有任务在执行。这个效果就类似于 linux
里面的 kill -9
和 kill -15
。
用法示例
下面看个示例就可以搞清楚了。
关于示例就说到这里吧,其实在实际开发中经常遇到,比如大数据开发当中, MapReduce
中使用System.exit(job.waitForCompletion(true)?0:1);
可以判短程序是否正常退出。