看到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. COGS 2769. mk去撸串
  2. VMware虚拟机三种网络模式(桥接、NAT、仅主机)的区别
  3. CTFshow 反序列化 web272
  4. 腾讯医疗AI实验室:基于深度学习的放疗靶区自动勾画
  5. GFS分布式文件系统简介及部署——让存储变得更高级
  6. vsm java_java – 我尝试使用JAXB将对象编组到xml文件中时,错误为“缺少@XmlRootElement注释”...
  7. 常见问题_智能切膜机常见问题
  8. 【Python】Matplotlib分层绘制投影柱状图
  9. 利用jquery.validate异步验证用户名是否存在
  10. vue中页面跳转传值_vue 页面跳转传参
  11. jdk工具keytool和jarsigner帮助(jdk keytooljarsigner tool manual)
  12. 关于-140.dll库缺失
  13. 显示器/电脑屏幕字体出现重影
  14. 一台计算机两个硬盘怎么设置密码,怎样给硬盘加密码? 两招解决硬盘加密难题...
  15. 心电图心电轴怎么计算_心电轴度数计算表
  16. 英语语法最终珍藏版笔记-11分词
  17. bugku~图穷匕见
  18. (关于边界填充)cv2.copyMakeBorder()怎么用?及效果展示(opencv)(python)
  19. 生鲜商城系统如何营销?
  20. 『C』程序的翻译执行

热门文章

  1. 独家深挖!F1赛车协会“刹车表现”是如何进行数据分析的?
  2. android Alarm闹钟发送广播播放音乐,android适配问题
  3. 百度给创新员工发2000w奖金........
  4. win7计算机设置成不黑屏,教你win7开机黑屏
  5. 脚踏实地、仰望星空的贵系学子们
  6. html5广告具有什么特性,最快认知什么才是HTML5广告!
  7. C#获取本地IP地址
  8. 计算机语言栏在哪里,电脑里的输入法不见了,去哪儿找
  9. web 前端后端分工
  10. AndroidStudio