`
mouer
  • 浏览: 101135 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

终止程序(exit() and halt())

    博客分类:
  • J2SE
阅读更多
public class Main extends Thread {
	
	@Override
	public void run() {
		for(int i = 0; i try {
				TimeUnit.SECONDS.sleep(3L);
			} catch (InterruptedException e) {
				// ignore
			}
		}
	}
	
	public static void main(String[] args) {
		new Main().start(); // thread
		/* shutdown hook */
		Runtime.getRuntime().addShutdownHook(
			new Thread(){
				public void run() {
					System.out.println("this is shutdown hook");
					/*
						while(true){
							// 发生死锁
						}
					*/
				}
			}
		);
		
		//Runtime.getRuntime().exit(0); // 等同于 System.exit(n); 会调用hook
		Runtime.getRuntime().halt(0); // 不调用 hook
		System.err.println("the main exit(0)");
	}
}
如程序中写的那样,如果hook发生死锁,那么Runtime.getRuntime().exit(0)或者System.exit(0)将永远不会被执行.这里介绍下
ShutdownHook,Java 虚拟机会为了响应以下两类事件而关闭
  • 1.程序正常退出,这发生在最后的非守护线程退出时,或者在调用 exit(等同于 System.exit)方法时。
  • 2.为响应用户中断而终止虚拟机,如键入 ^C;或发生系统事件,比如用户注销或系统关闭。

关闭hook只是一个已初始化但尚未启动的线程。虚拟机开始启用其关闭序列时,它会以某种未指定的顺序启动所有已注册的关闭钩子,并让它们同时运行。运行完所有的钩子后,如果已启用退出终结,那么虚拟机接着会运行所有未调用的终结方法。最后,虚拟机会暂停。注意,关闭序列期间会继续运行守护线程,如果通过调用 exit 方法来发起关闭序列,那么也会继续运行非守护线程。

一旦开始了关闭序列,则只能通过调用 halt 方法来停止这个序列,此方法可强行终止虚拟机。

分享到:
评论

相关推荐

    linux基础命令记录1

    在Linux操作系统中,掌握基础命令是使用和管理系统的基石。"Linux基础命令记录1"这个主题涵盖了一系列初学者在学习Linux时必须了解的关键指令。这些命令对于日常的系统操作、文件管理和系统维护至关重要。...

    实验一:Linux基础操作

    - `halt`和`reboot`:停止和重启系统,功能类似`shutdown`但无警告信息。 4. **Shell特殊按键**: - `Ctrl+C`:终止当前命令。 - `Ctrl+D`:在命令行中表示EOF(文件结束符),通常用于退出Shell。 - `Ctrl+Z`...

    HALT内部培训教材

    ### HALT内部培训教材知识点概览 #### 一、HALT与HASS概念解析 - **HALT**(Highly Accelerated Life Test)即高加速寿命试验,是一种旨在通过施加逐渐增强的环境应力来加速暴露试验样品缺陷的测试方法。这种测试...

    STM8单片机低功耗停机 Halt 模式代码实现

    6. **恢复执行**:当单片机被唤醒后,程序从Halt模式退出的地方继续执行。此时,需要恢复之前保存的寄存器状态,以保证程序的正常运行。 在描述中提到的IAR编译器,是一种常用的STM8开发工具,它提供了友好的集成...

    STM8单片机低功耗 活跃停机Active Halt模式实现

    6. **退出Active Halt**:一旦中断发生,单片机会自动从Active Halt模式退出,恢复执行程序。此时,可能需要重新配置时钟系统,切换回高速时钟源,以确保程序的正常运行速度。 在IAR开发环境中,以上步骤可以通过...

    高加速寿命试验(HALT)

    **高加速寿命试验(HALT)详解** 高加速寿命试验(High Accelerated Life Testing,简称HALT)是一种在产品开发阶段采用的极端测试方法,旨在快速发现产品设计和材料的弱点,以提升产品的可靠性和耐用性。这项技术...

    HALT试验系统

    创新性的 HALT HALT系统 彻底解决了传系统 彻底解决了传系统 彻底解决了传HALT 系统 20 多年的设计缺陷,采 多年的设计缺陷,采 多年的设计缺陷,采 用专利的气锤布置设计、通过有限元分析优化台面结构集成 用专利的...

    低功耗模式_Halt停机模式0.3uA.rar

    标题"低功耗模式_Halt停机模式0.3uA.rar"揭示了我们将讨论的是一个关于微控制器(可能是STM8或STM32系列)在Halt停机模式下实现超低功耗的技术,目标是在这种模式下将电流消耗降至0.3微安(uA)。描述中的"halt 超强低...

    IEST RP-PR003.1-2012 HALT and HASS.pdf

    IEST RP-PR003.1-2012 HALT and HASS.pdf

    11.Active-HALT低功耗模式.rar

    要实现最低功耗CPU的IO口要输出确定的电平;例程除了按键与LED接口其他IO全部输出低; 还需要使用超低功耗... 使能,即可通过HALT指令进入ACTIVD-HALT模式; 实测电流大约1.4ua RTC中断唤醒,LED以一定频率闪烁

    可靠性测试中的HALT实验与HASS实验.pdf

    "可靠性测试中的HALT实验与HASS实验" 可靠性测试中的HALT实验与HASS实验是美国军方延伸出的设计质量验证与制造质量验证的试验方法,现已成为美国电子业界的标准产品验证方法。HALT(Highly Accelerated Life Test)...

    HALT低功耗模式-STM8L151K4.rar_C5U_GCKI_HALT低功耗模式_HALT低功耗模式-STM8L151K4

    为了实现HALT模式,开发者需要在程序中配置适当的寄存器,例如设置控制寄存器(CR)的HALT位。在配置过程中,必须注意保护任何正在进行的操作,并确保所有必要的数据和状态被正确保存。 “C5U_GCKI”可能指的是微...

    基于HALT试验结果的可靠性计算方法_新能源检测技术材料化学元器件汽车电子热分析实验室仪器温度.doc

    【基于HALT试验结果的可靠性计算方法】 高加速寿命试验(HALT)是一种创新的测试技术,由Hobbs提出,旨在快速揭示产品的潜在失效模式,以提高产品可靠性。HALT试验通过施加高于常规使用条件的温度和振动应力,以...

    可靠性测试中HALT实验与HASS实验的区别_新能源检测技术材料化学元器件汽车电子热分析实验室仪器温度.doc

    在可靠性测试领域,HALT(Highly Accelerated Life Test)实验和HASS(High Accelerated Stress Screen)实验是两种至关重要的方法,它们主要用于新能源、汽车电子、材料化学以及元器件等行业的品质保证和产品优化。...

    PowerPC Lauterbach cmm: Halt the core directly at power on reset

    专治各种疑难杂症的lauterbach脚本cmm文件。劳特巴赫T32调试器在PowerPC MCU上电的瞬间直接连接并且暂停e200内核,从内核接管的第一条PC... Request user to power cycle target and connect with SYStem.Mode.StandBy

    Pascal的多种退出语句用法.doc

    它不返回任何值,只是简单地终止程序。`halt`通常配合错误处理使用,比如在程序出现严重错误时使用`halt`结束程序。然而,现代Pascal变种(如Free Pascal和Delphi)推荐使用`halt(0)`来代替`halt`,因为`halt(0)`...

    KunLun9016 升级HBA卡固件时FWupgrade小系统halt问题故障案例分析

    这是因为系统镜像文件未完全加载成功,且开始执行"Starting Cleaning Up and Shutting Down Daemons."守护程序时,出现网络不稳定现象,则导致守护程序执行失败打印,以及系统 halt。 四、解决方案 为了解决该问题...

    delphi中exit,abort,break,continue的区别介绍

    `halt`是更为激烈的停止程序的方式,它会立即终止应用程序的执行,且以非正常方式返回操作系统。这意味着程序可能不会进行任何清理工作,如释放资源或保存数据,因此应谨慎使用。 6. **runerror**: `runerror`...

    linux halt命令参数及用法详解.docx

    它会终止应用程序,同步数据到磁盘,然后停止内核。 3. **reboot**:用于重启系统,相当于`shutdown -r now`。 4. **init**:这是所有其他关机命令的基础,通过改变运行级别(runlevel)来控制系统的启动、停止和...

    STM8L052 halt.rar_STM8L052_Stm8l052低功耗_stm8L052 HALT_stm8l052 低功

    当外部中断触发时,HAL_IRQHandler()中断处理程序会被调用,从中断标志中识别出唤醒源,并执行相应的恢复操作,如重新启动系统或继续执行程序。 在实际应用中,优化功耗不仅仅依赖于进入halt模式,还包括选择合适的...

Global site tag (gtag.js) - Google Analytics