java halt_System.exit和Runtime halt区别_孤注一智的博客-程序员宅基地

技术标签: java 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();

}

}

}

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_36485371/article/details/114151211

智能推荐

看门狗2显示服务器不可用,看门狗2显示目前无法使用这个应用程序 | 手游网游页游攻略大全..._weixin_39943202的博客-程序员宅基地

发布时间:2015-10-22Xbox360版已经偷跑,很多玩家反应如何在游戏中显示中文字母呢,下面就由小编来为玩家带来解答吧. 下载XEX的玩家可以直接操作 下载ISO的玩家先转XEX 下载了GOD的玩家 先GOD2ISO 再 ...标签:游戏攻略 攻略秘籍发布时间:2016-08-24看门狗一经推出就受到了广大玩家的喜爱,今天小编为大家带来的就是看门狗Xbox360版修改显示中文方法的介绍,我...

如何与oclif进行个人聊天_一二三是五六十的博客-程序员宅基地

We know about Jarvis from Iron Man. He is very reliable indeed. Although, we can pleasantly want to own a Jarvis, we can start creating simple CLI that you can customize for your own simple needs. Wit...

重复提交问题解决方案_AP0906424的博客-程序员宅基地_按钮重复提交的问题怎么解决

今天来讲讲最常见的重复提交问题,导致重复提交的问题有很多种,比如:快速点击了两次提交按钮、浏览器使用后退功能导致重复提交表单、nginx重发等情况导致。解决的办法有很多种,比如前端就有利用JS在第一次提交之后,禁用提交按钮或者设置一个特殊的字段标志是否第一次提交。后端实现也有很多种方法,我自己使用过的2种,今天就介绍一下。一、利用本地锁,spring AOP切面拦截,对在规定时间内提交的数据进行校验,如果完全一致,则认为是重复提交,丢弃处理。1、实现一个用于防止重复提交的注解,@Resubmit

spring framework test3种方式_牛麦康纳的博客-程序员宅基地

微服务中Spring boot的分布数以百计,这么多的服务结点如果依赖人工测试将会是一场灾难,所以单个的boot服务必须具有单元测试甚至更负责的集成测试的能力。毕竟在微服务框架中,我们更多的精力会花费在服务架构上,而不是单个的服务能力上。    Spring boot提供了1种单元测试和2种web应用测试。

MFC界面编程基础(16):文档、视图、框架_半个月儿上来的博客-程序员宅基地

MFC应用程序模型历经多年以有了相当大的发展。有一个时期,它只是个使用应用程序对象和主窗口对象的简单模型。在这个模型中,应用程序的数据作为成员变量保持在框架窗口类中,在框架窗口的客户区中,该数据被提交显示器。随着MFC2.0的问世,一种应用程序结构的新方式----MFC文档/视结构出现了。在文档/视图结构中,CFrameWnd繁重的任务被委派给几个不同类,实现了数据存储和显示的分离。文档/视图应...

操作系统实验五文件系统-16281141_qq_41936609的博客-程序员宅基地

文件系统实验报告16281141实验简介本实验要求在模拟的I/O系统之上开发一个简单的文件系统。用户通过create, open, read等命令与文件系统交互。文件系统把磁盘视为顺序编号的逻辑块序列,逻辑块的编号为0至L − 1。I/O系统利用内存中的数组模拟磁盘。I/O系统实际物理磁盘的结构是多维的:有柱面、磁头、扇区等概念。I/O系统的任务是隐藏磁盘的结构细节,把磁盘以逻辑块的面目...

随便推点

安卓学习日志 Day16 — 在应用中使用SQLite_HEY-BLOOD的博客-程序员宅基地

文章目录概述起始项目定义架构和协定Schema创建 Contract 类使用 SQLiteOpenHelper 创建数据库继承 SQLiteOpenHelper创建并连接数据库将信息添加到数据库通过菜单项插入虚假宠物通过编辑器插入宠物数据库查询方法Cursor 对象查询并显示宠物信息总结参考概述SQLite 数据库已经了解得差不多了。下面将侧重与如何在应用中创建数据库,然后学习如何插入及查询数据。起始项目Pets 应用 的初始代码可以从 GitHub 仓库获得,使用 Git 命令克隆到初始代码:

工作流学习——重要概念扫盲篇一步曲_weixin_34255793的博客-程序员宅基地

2019独角兽企业重金招聘Python工程师标准&gt;&gt;&gt; ...

python 扩展_用C语言扩展Python的功能_weixin_39901558的博客-程序员宅基地

用C语言扩展Python的功能如何找到、使用和参与开放源代码项目肖文鹏2003 年 2 月 03 日发布一、简介Python是一门功能强大的高级脚本语言,它的强大不仅表现在其自身的功能上,而且还表现在其良好的可扩展性上,正因如此,Python已经开始受到越来越多人的青睐,并且被屡屡成功地应用于各类大型软件系统的开发过程中。与其它普通脚本语言有所不同,Python程序员可以借助Python语言提供的...

在.net中序列化读写xml方法的总结--转载过来学习学习_dkicokg6163的博客-程序员宅基地

原文章地址:http://www.cnblogs.com/fish-li/archive/2013/05/05/3061816.html首先做个大概的总结,XML包括的元素有XmlElement,XmlAttribute ,InnerText。阅读目录开始最简单的使用XML的方法类型定义与XML结构的映射使用 XmlElement使用 XmlAttribu...

python导入模块找不到什么原因_浅谈python 导入模块和解决文件句柄找不到问题..._Hahahhhg的博客-程序员宅基地

如果你退出 python 解释器并重新进入,你做的任何定义(变量和方法)都会丢失。因此,如果你想要编写一些更大的程序,为准备解释器输入使用一个文本编辑器会更好,并以那个文件替代作为输入执行。这就是传说中的脚本Python 提供了一个方法可以从文件中获取定义,在脚本或者解释器的一个交互式实例中使用。这样的文件被称为模块。导入模块:python导入模块默认是从sys.path的路径中查找。所以应该把这...

fiddler 链接mysql_数据库(MySql)连接详细讲解_开朗可燃冰Tto的博客-程序员宅基地

前言说到数据库连接,这个大家都很熟悉了。但是熟悉一般来自于下面三种情况* 刚开始学编程的时候,老师就说用完的数据库连接一定要关闭,不然会有严重的后果。* 编程一段时间后,大家都说要用连接池来优化数据库连接。* 编程几年后,老大们说要考虑一台服务器mysql的并发连接数与负载等。所以不停留在听说的层面,深入去学习与研究下mysql的连接机制与.net mysql驱动对连接的管理也挺有必要的。本文会用...

推荐文章

热门文章

相关标签