看到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区别相关推荐

  1. java中的异常种类和区别以及处理机制和区别

    java中的异常种类和区别以及处理机制和区别 按照异常需要处理的时机分为编译时异常(也叫强制性异常)也叫 CheckedException 和运行时异常(也叫非强制性异常)也叫 RuntimeExce ...

  2. Java参数校验validation和validator区别

    Java参数校验validation和validator区别 1. 参数校验概述 2. validation与validator区别 3. validation注解说明 4. validator注解说 ...

  3. java to go 基础知识与区别入土指南

    java to go 基础知识与区别入土指南 文章目录 java to go 基础知识与区别入土指南 @[toc] 基础篇 关于基础类型 关于复合数据类型 关于切片 关于Map 关于sync.map ...

  4. java aes php_php和java的aes默认加密算法有点区别及解决方法。

    1.php和java的aes默认加密算法有点区别,php能解密java加密的密文,但java不能解密php加密的密文.原因在于: 1.Java中AES加密与解密默认使用AES/ECB/PKCS5Pad ...

  5. java char的包装对象,Java 从Character和char的区别来学习自动拆箱装箱

    本文结构 1.Character和char 的区别: 2.自动拆箱装箱java 1.Character和char 的区别: Character是类,char基本数据类型.数组 在java中有三个类负责 ...

  6. linux脚本中的exit,Shell中exit和return的区别讲解

    1.exit命令 exit命令是Shell内建命令,用于退出当前Shell进程.使用格式如下: exit [] 可以指定退出状态n,n的取值范围是0-255,一般情况下,0表示正常退出,非零表示异常退 ...

  7. c语言 python-C语言、Java语言和python语言的区别在哪里

    原标题:C语言.Java语言和python语言的区别在哪里 我们经常听到C语言.Java语言和python语言,那么这三者的区别在哪里呢?随着科技的进步以及新技术的推进,编程语言的种类也是越来越多,随 ...

  8. linux中进程退出函数:exit()和_exit()的区别

    linux中进程退出函数:exit()和_exit()的区别 (1)_exit()执行后立即返回给内核,而exit()要先执行一些清除操作,然后将控制权交给内核. (2)调用_exit函数时,其会关闭 ...

  9. 1.8 Java字节流和字符流的区别,如何区分输入流和输出流?

    Java字节流和字符流的区别 首先我们先大概总结一下前面学习的内容,可分为以下几点: 以 Stream 结尾都是字节流,Reader 和 Writer 结尾都是字符流. InputStream 是所有 ...

  10. java中ArrayList和LinkedList的区别

    首先来看ArrayList和LinkedList的集成类和接口的区别.// lang java public class ArrayList<E> extends AbstractList ...

最新文章

  1. BZOJ 3119 Book (贪心+数学推导)
  2. CentOS 6上配置安装MariaDB,二进制文件,非源码
  3. MarkDown语法, 快捷键,Dos命令
  4. Git Proxy开关
  5. 怎样把java项目转换成web项目_Eclipse中将Java项目转换成Web项目的方法
  6. 又一所新大学来了!投资百亿,对标国际一流大学
  7. 心情沮丧的时候可以这样做
  8. 1.10 编程基础之简单排序_10 单词排序
  9. Basic Edit in vim
  10. html5期末考试题答案,HTML5期末考试题型
  11. 四、 vSphere 6.7 U1(四):部署VCSA
  12. 【TSP】基于matlab GUI遗传算法求解旅行商问题【含Matlab源码 1333期】
  13. linux grep 正则 id,浅谈Linux grep与正则表达式
  14. sqlplus无密码登录TNS协议适配器错误
  15. One by One [ 1 x 1 ] Convolution - counter-intuitively useful
  16. Eclipse Java快捷键
  17. android指南针程序,如何在Android上制作精确的指南针
  18. D盘需要管理员权限问题
  19. 计算机编程课程顺序_您可以在八月开始的500项免费在线编程和计算机科学课程
  20. 使用tcpdump抓包

热门文章

  1. My Notes Keeper 注册码算法注册机
  2. C语言:access函数的用法
  3. 报错:xxx.foreach is not a function
  4. 谁为乔布斯写下「致敬疯子」的广告词
  5. 携程线上测评测试题目,答案解析
  6. php 调用 百度句法分析,【原创源码】百度新版翻译API调用使用范例
  7. cass等距离等分线段的命令键_教你用CAD将线段等分,弧线也可定距等分!
  8. 【摩斯电码】我是如何通过一张小纸条渗透进了妹子的心
  9. asa 防火墙拦截了https_ASA防火墙设置URL过滤
  10. 自学Python第二十天- MongoDB 库