为Java应用程序加上退出事件处理(ShutdownHook)
ShutdownHook 是这样一个概念:向虚拟机注册一个线程,当程序退出(Ctrl+C)时虚拟机会启动这个线程,我们可以在这个线程的run()中做一些清除的工作,如:释放数据库连接,关闭文件等.
注册:
注销:
请注意, 该 hook 线程必须是已经初始化但是没有运行的线程, 这个线程将在虚拟机响应用户的中断之前运行, 例如按下 ^C, 或者系统范围的事件, 例如注销或者关闭系统时.
[例子]
* 在这个线程中实现程序退出前的清理工作
*
* @author Administrator
*
*/
class TestThread extends Thread {
boolean isTerminal = false;
public void run() {
while (!isTerminal) {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("run sub thread");
}
}
/**
* 清理工作
*/
public void onTerminal() {
isTerminal = true;
System.out.println("stop sun sub thread");
}
}
* ShutdownDownHook测试类
*
* @author Administrator
*
*/
public class TestShutdownHook extends Thread {
TestThread testThread;
public void addThread(TestThread t) {
testThread = t;
}
/**
* 实现程序退出前的清理工作
*/
public void run() {
System.out.println("This is ShutdownHook");
testThread.onTerminal();
}
public static void main(String[] args) {
TestShutdownHook m = new TestShutdownHook();
TestThread t = new TestThread();
t.start();
m.addThread(t);
// 注册退出处理线程
Runtime.getRuntime().addShutdownHook(m);
}
}
运行结果:
run sub thread
run sub thread
run sub thread
This is ShutdownHook
stop sun sub thread
可以看到:当程序退出时启动了TestThread线程,执行了定义的释放工作。
转载于:https://www.cnblogs.com/zjun/archive/2011/09/29/2195927.html
为Java应用程序加上退出事件处理(ShutdownHook)相关推荐
- java关闭事件_为Java程序添加退出事件
package org.swing.os; import java.util.*; import java.io.*; /** * 为Java程序添加退出事件 * * @author wuhq */ ...
- java自动加空格吗_程序加上空格和不加空格运行结果不一样
已结贴√ 问题点数:20 回复次数:2 程序加上空格和不加空格运行结果不一样 程序第六行在教育教学后面加空格结果为 全部图书: 1.郁达夫随笔:伤感行旅 郁达夫 北京大学出版社 38 ...
- Java应用程序的基本框架
为什么80%的码农都做不了架构师?>>> 1Java应用程序的运行环境 Java应用程序是指可以独立运行在Java虚拟机上的程序,它是一种中间代码(byte-code?copy ...
- 【Java应用程序开发】【期末复习题】【2022秋】【答案仅供参考】
文章目录 零.考试说明 一.单选题(175-2-2题,1') 二.多选题(16题,2') 三.判断题(20题,1') 四.简答题(18题,5') 五.编程题(9题,10') 零.考试说明 答题时长:9 ...
- JAVA图形界面中的事件处理
在JAVA应用程序或者Applet运行时,如果用户进行某个操作,例如单机鼠标键或者输入字符,程序应当做出适当响应. 那举个例子来说,当我们点击某个按钮,会出现一个按钮事件,那么这个就是按钮的事件处理: ...
- Java GUI程序示例
Java GUI程序示例 与命令行界面相比,图形界面对于用户来说更为简便易用.图形用户界面(Graphical User Interface,简称 GUI),关于Java图形用户界面,可参见 http ...
- Java小程序之记事本
这个记事本只做了个界面,里面的功能就做了三四个吧!特别适合新手学做GUI这一章. 我主要分了两大类,代码注释上面都有. 第一大类我主要把用到的所有组件全部定义了出来,这样看起来更方便一点 第二大类就是 ...
- java进程未正常退出
2019独角兽企业重金招聘Python工程师标准>>> 背景: 通过shell脚本定时启动的java进程一直都没有退出 #0 */2 * * * /shell/command.sh ...
- Java应用程序项目的打包与发行
这里主要是讲解一下怎样将 Java程序打包成独立运行的exe程序包,以下这种方法应该是最佳的解决方案了.NetDuke的EXE程序包了是使用这种方案制作的.在操作步骤上还是比较简单的,而且通用性强. ...
最新文章
- ASP绕过防注入的新思路
- 这个笑脸胡子的表情是什么:“<:] {%>”?
- Ninja Blocks物联网平台简介
- hql可以使用distinct吗_香薰精油可以当香水使用吗
- C++实现cut rod切杆算法(附完整源码)
- HDFS写入和读取过程
- GitBook的使用方式,快速创建网页文档
- vs2015调试时不显示vector内容的解决方法
- 数学建模可以用python吗_Python中常用的数学建模Scipy
- POJ 3617 Best Cow Line
- 985翻译硕士都在找的这款软件
- html5网页及Cocos中生成二维码
- 取绝对值 :abs fabs fabsf用法
- 国际足联还不考虑在中国办一届世界杯吗?
- C语言RLE压缩解压算法(西电C程序作业4)
- SCCM部署系统任务序列失败错误代码0x80070002
- 第九届泰迪杯A题(1)
- python listbox大小_Python3 tkinter基础 Listbox height 显示行数的上限
- 投资理财-言微不劝人
- ChatGPT国内镜像站初体验:聊天、Python代码生成等
热门文章
- mysql 磁盘组_有效管理 ASM 磁盘组空间
- c语言课题设计字符串处理函数报告,C语言输入输出库函数设计实验报告.doc
- PHP数组的访问方法有几种,数组常用方法有哪些
- 体积最小桌面linux,Tiny Core Linux - 体积最小的精简 Linux 操作系统发行版之一 (仅10多MB)...
- c语言中二维数组的结构体,怎么才能把结构体里面的二维数组打印出来?
- map+DP leetcode446
- Redis:21---客户端相关配置篇
- (一)容器从入门到深入-容器和镜像
- 推荐系统(5)-深度推荐模型-AutoRec、DeepCrossing、NeuralCF、PNN、WideDeep、FNN、DeepFM、NFM
- Linux crypto相关知识的汇总 Linux加密框架crypto对称算法和哈希算法加密模式