在线上Java程序中经常遇到进程程挂掉,一些状态没有正确的保存下来或者程序中尚有一些未完成的任务,这时候就需要在JVM关掉的时候执行一些清理现场的代码。Java中得ShutdownHook提供了比较好的方案。
JDK在1.3之后提供了Java Runtime.addShutdownHook(Thread hook)方法,可以注册一个JVM关闭的钩子,这个钩子可以在以下几种场景被调用:
- 1)程序正常退出
- 2)使用System.exit()
- 3)终端使用Ctrl+C触发的中断
- 4)系统关闭
- 5)使用Kill pid命令干掉进程
注:在使用kill -9 pid是不会JVM注册的钩子不会被调用。
在JDK中方法的声明:
public void addShutdownHook(Thread hook)
参数
hook -- 一个初始化但尚未启动的线程对象,注册到JVM钩子的运行代码。
异常
IllegalArgumentException -- 如果指定的钩已被注册,或如果它可以判定钩已经运行或已被运行
IllegalStateException -- 如果虚拟机已经是在关闭的过程中
SecurityException -- 如果存在安全管理器并且它拒绝的RuntimePermission(“shutdownHooks”)
相关推荐
在IT领域,尤其是在系统安全和逆向工程中,绕过钩子(hook)技术是一种常见的技术对抗手段。本文将深入探讨“重载内核实现绕过一切钩子”的概念,以及如何通过驱动程序来实现这一目标。我们将主要关注内核级别的操作...
在这个特定的“屏颜色拾取器”项目中,开发者利用API(应用程序编程接口)来实现这一功能,并且结合了全局钩子和鼠标钩子的技术。 首先,API是操作系统提供的一系列函数和方法,让程序员能够访问系统功能,如图形...
Java钩子(Hook)机制是Java虚拟机(JVM)提供的一种高级机制,允许程序员在特定的事件发生时插入自定义的行为。这个机制基于Java的动态代理和反射API,使得我们可以在程序运行时对某些行为进行拦截和处理。在Java中...
在IT领域,尤其是在游戏编程和系统级别的交互中,键盘钩子是一种常见的技术,它允许程序拦截和处理键盘输入,而不必是当前活动窗口。在这个场景中,“C# 键盘钩子 - WARIII 改键”指的是使用C#语言编写的一种特定...
全局钩子是Windows编程中的一种技术,用于监听和捕获系统范围内的特定事件,例如键盘和鼠标输入。在C#中实现全局钩子,可以利用.NET Framework提供的WinAPI函数,结合P/Invoke技术来调用Windows API。本项目提供了一...
"google-java-format" 是一个由Google开发的开源项目,专门用于自动格式化Java源代码,使其遵循特定的编码风格和规范。这个工具旨在提高代码一致性,减少因代码格式问题引发的冲突,提升团队协作效率。它能快速地将...
在Windows操作系统中,键盘钩子(Keyboard Hook)是一种机制,允许开发者通过系统级钩子来监控和处理键盘事件。这通常涉及到对Windows消息系统的深入理解,因为键盘输入本质上是通过消息队列进行传递的。本项目提供...
标题中的“java-git-pre-commit-hook”是一个专门为Java和Java EE项目设计的Git预提交钩子。预提交钩子是Git版本控制系统中的一种自定义脚本,它在代码提交到仓库之前运行,可以用来检查代码质量、格式化代码、运行...
在Java中,实现鼠标钩子通常涉及到使用Java的`java.awt.MouseInfo`和`java.awt.event.MouseEvent`类,以及可能的`java.lang.reflect.Method`用于钩入系统级别的事件处理。 首先,`MouseInfo`类提供了获取鼠标状态的...
java原始文件格式google-java-format-git-pre-commit-hook 一个git pre-commit钩子脚本,用于根据Google Java样式指南设置Java源文件的格式 将pre-commit脚本(具有该名称和可执行位设置)放在.git/hooks目录中。 该...
Applet钢琴模拟程序java源码 2个目标文件,提供基本的音乐编辑功能。编辑音乐软件的朋友,这款实例会对你有所帮助。 Calendar万年历 1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM...
主要介绍了Java钩子方法概念原理详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
ShutdownHook-Java 优雅停机解决方案 ShutdownHook 是 Java 语言提供的一种钩子机制,当 JVM 接受到系统的关闭通知之后,调用 ShutdownHook 内的方法,用以完成清理操作,从而平滑的退出应用。这种有计划平滑的...
【标题】:Hook_钩子程序-Delphi 在Delphi编程环境中,Hook技术是一种强大的功能,它允许程序员拦截和处理系统或应用程序级别的特定事件。钩子程序是实现这一技术的关键,它可以在操作系统或应用程序的特定点插入...
标题中的“jnativehook_java键盘钩子_hookapi_jnativehook”指的是Java中使用JNativeHook库来实现系统级键盘钩子的功能。JNativeHook是一个开源的Java库,它允许开发者在本地平台上设置全局键盘和鼠标事件监听器,而...
在IT领域,钩子(Hook)是一种非常关键的技术,它允许程序员拦截并处理特定的系统事件或消息。在本教程“易语言钩子源码实例---系统钩子实例”中,我们将深入探讨如何使用易语言来实现钩子功能,特别针对入门者设计...
在这个Java黄金矿工游戏中,图片资源主要涵盖了背景、角色、物品等元素,如bg.jpg、bg1.jpg(背景图)、water.png(水体)、gold1.png、gold0.png、gold3.png(不同形态的金子)、peo.png(人物)以及rock1.png...
在IT领域,尤其是在Windows系统编程中,"全局钩子"是一种技术,允许程序监控系统级事件,如键盘、鼠标输入或者其他特定的系统消息。本文将深入探讨如何在C#中实现远程安装全局钩子,同时结合通信类的设计,尤其是...
64位内核第二讲,进程保护之对象钩子-附件资源