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 ...
最新文章
- COGS 2769. mk去撸串
- VMware虚拟机三种网络模式(桥接、NAT、仅主机)的区别
- CTFshow 反序列化 web272
- 腾讯医疗AI实验室:基于深度学习的放疗靶区自动勾画
- GFS分布式文件系统简介及部署——让存储变得更高级
- vsm java_java – 我尝试使用JAXB将对象编组到xml文件中时,错误为“缺少@XmlRootElement注释”...
- 常见问题_智能切膜机常见问题
- 【Python】Matplotlib分层绘制投影柱状图
- 利用jquery.validate异步验证用户名是否存在
- vue中页面跳转传值_vue 页面跳转传参
- jdk工具keytool和jarsigner帮助(jdk keytooljarsigner tool manual)
- 关于-140.dll库缺失
- 显示器/电脑屏幕字体出现重影
- 一台计算机两个硬盘怎么设置密码,怎样给硬盘加密码? 两招解决硬盘加密难题...
- 心电图心电轴怎么计算_心电轴度数计算表
- 英语语法最终珍藏版笔记-11分词
- bugku~图穷匕见
- (关于边界填充)cv2.copyMakeBorder()怎么用?及效果展示(opencv)(python)
- 生鲜商城系统如何营销?
- 『C』程序的翻译执行
热门文章
- 独家深挖!F1赛车协会“刹车表现”是如何进行数据分析的?
- android Alarm闹钟发送广播播放音乐,android适配问题
- 百度给创新员工发2000w奖金........
- win7计算机设置成不黑屏,教你win7开机黑屏
- 脚踏实地、仰望星空的贵系学子们
- html5广告具有什么特性,最快认知什么才是HTML5广告!
- C#获取本地IP地址
- 计算机语言栏在哪里,电脑里的输入法不见了,去哪儿找
- web 前端后端分工
- AndroidStudio