java halt_System.exit和Runtime halt区别
看到RM在处理异常的时候使用了两种退出方式,而且是针对不同的异常。特意查询了一些资料来看看,两种方式有什么不同。
System.exit
终止当前正在运行的Java虚拟机。参数作为状态代码,按照惯例,一个非零状态码表示异常终止。
用线程描述,在多线程情况下,可能更准确一些
1.调用方法后,线程会退出
2.未捕获的异常被线程抛出,但如果有其他非守护线程,程序将继续运行。
3.反馈状态码,一般在脚本中有用。
4.线程退出,还是做一些清理动作
------------------------------------------------------------------------------------
Java虚拟机退出包括两个阶段:
第一个阶段:会以某种未指定的顺序启动所有已注册钩子,并且允许它们同时运行直至结束
第二个阶段:如果已启用runFinalizersOnExit设置为true,则运行所有未调用的终结方法(finalizer方法)
------------------------------------------------------------------------------------
Runtime.getRuntime().halt(status)
现在runtime的halt比较好理解了,他不会执行钩子函数和finalizer方法,而是直接退出。
+++++++++++++
详细英文解析,可以看JDK源码或是Javadoc
+++++++++++++以下是自己写的一个Demo,以作验证+++++++++++++
/**
* @author yanbit
* @date Aug 18, 2015 3:02:01 PM
*
*/
public class SystemExitAndRuntimeHaltDemo {
public static void main(String[] args) {
for (int i = 0; i < 5; i++) {
Thread t = new Thread(new Hook());
Runtime.getRuntime().addShutdownHook(t);
}
//System.exit(1);
//Runtime.getRuntime().halt(-1); }
}
class Hook implements Runnable{
@Override
public void run() {
System.out.println(Thread.currentThread().getName());
try {
Thread.sleep(1000);
System.out.println(Thread.currentThread().getName()+" hook...");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
java halt_System.exit和Runtime halt区别相关推荐
- java中的异常种类和区别以及处理机制和区别
java中的异常种类和区别以及处理机制和区别 按照异常需要处理的时机分为编译时异常(也叫强制性异常)也叫 CheckedException 和运行时异常(也叫非强制性异常)也叫 RuntimeExce ...
- Java参数校验validation和validator区别
Java参数校验validation和validator区别 1. 参数校验概述 2. validation与validator区别 3. validation注解说明 4. validator注解说 ...
- java to go 基础知识与区别入土指南
java to go 基础知识与区别入土指南 文章目录 java to go 基础知识与区别入土指南 @[toc] 基础篇 关于基础类型 关于复合数据类型 关于切片 关于Map 关于sync.map ...
- java aes php_php和java的aes默认加密算法有点区别及解决方法。
1.php和java的aes默认加密算法有点区别,php能解密java加密的密文,但java不能解密php加密的密文.原因在于: 1.Java中AES加密与解密默认使用AES/ECB/PKCS5Pad ...
- java char的包装对象,Java 从Character和char的区别来学习自动拆箱装箱
本文结构 1.Character和char 的区别: 2.自动拆箱装箱java 1.Character和char 的区别: Character是类,char基本数据类型.数组 在java中有三个类负责 ...
- linux脚本中的exit,Shell中exit和return的区别讲解
1.exit命令 exit命令是Shell内建命令,用于退出当前Shell进程.使用格式如下: exit [] 可以指定退出状态n,n的取值范围是0-255,一般情况下,0表示正常退出,非零表示异常退 ...
- c语言 python-C语言、Java语言和python语言的区别在哪里
原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...
- linux中进程退出函数:exit()和_exit()的区别
linux中进程退出函数:exit()和_exit()的区别 (1)_exit()执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核. (2)调用_exit函数时,其会关闭 ...
- 1.8 Java字节流和字符流的区别,如何区分输入流和输出流?
Java字节流和字符流的区别 首先我们先大概总结一下前面学习的内容,可分为以下几点: 以 Stream 结尾都是字节流,Reader 和 Writer 结尾都是字符流. InputStream 是所有 ...
- java中ArrayList和LinkedList的区别
首先来看ArrayList和LinkedList的集成类和接口的区别.// lang java public class ArrayList<E> extends AbstractList ...
最新文章
- BZOJ 3119 Book (贪心+数学推导)
- CentOS 6上配置安装MariaDB,二进制文件,非源码
- MarkDown语法, 快捷键,Dos命令
- Git Proxy开关
- 怎样把java项目转换成web项目_Eclipse中将Java项目转换成Web项目的方法
- 又一所新大学来了!投资百亿,对标国际一流大学
- 心情沮丧的时候可以这样做
- 1.10 编程基础之简单排序_10 单词排序
- Basic Edit in vim
- html5期末考试题答案,HTML5期末考试题型
- 四、	vSphere 6.7 U1(四):部署VCSA
- 【TSP】基于matlab GUI遗传算法求解旅行商问题【含Matlab源码 1333期】
- linux grep 正则 id,浅谈Linux grep与正则表达式
- sqlplus无密码登录TNS协议适配器错误
- One by One [ 1 x 1 ] Convolution - counter-intuitively useful
- Eclipse Java快捷键
- android指南针程序,如何在Android上制作精确的指南针
- D盘需要管理员权限问题
- 计算机编程课程顺序_您可以在八月开始的500项免费在线编程和计算机科学课程
- 使用tcpdump抓包