JustJava
zJun's Tech Weblog
BlogJava
|
首页
|
发新随笔
|
发新文章
|
联系
|
聚合
|
管理
随笔:76 文章:0 评论:104 引用:0
为程序加上“关闭钩子”(ShutdownHook)
“
关闭钩子
”(ShutdownHook)是这样一个概念:向虚拟机注册一个线程,当程序退出(Ctrl+C)时虚拟机会启动这个线程,我们可以在这个线程的run()中做一些清除的工作,如:
释放数据库连接,关闭文件
等.
注册:
Runtime.getRuntime().addShutdownHook(Thread t);
注销:
Runtime.getRuntime().removeShutdownHook(Thread t);
[例子]
/*
*
* 在这个线程中实现程序退出前的清理工作
*
* @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
run sub thread
This is ShutdownHook
stop sun sub thread
可以看到:当程序退出时启动了TestThread线程,执行了定义的释放工作。
发表于 2006-03-12 23:38
zJun's帛罗阁
阅读(1719)
评论(5)
编辑
收藏
评论
#
re: 为程序加上“关闭钩子”(ShutdownHook)
你这个程序通得过???不会是死循环???楼主的知识点不错,但程序一看就知道有问题了,楼主真得测试过?
#
re: 为程序加上“关闭钩子”(ShutdownHook)
@anyfly
你先在你的机器上试试,看看会不会出现你说的问题?! 呵呵
#
re: 为程序加上“关闭钩子”(ShutdownHook)
@anyfly
使用Ctrl+C退出试试看。
忘了说明一下,shutdownhook通常用来在Ctrl+C退出时触发清理工作(多是在后台服务中,这种服务通常是24*7运行的,正常情况下是不退出的),如果能够在程序中显式地确定退出的时机,那么最好是直接在退出前做清理,不用搞得这么复杂。
#
re: 为程序加上“关闭钩子”(ShutdownHook)
楼主的注释写错了。。。 被注册到shutdownhook上的是TestShutdownHook的实例作清理工作的也是TestShutdownHook的run() 他将无限循环的TestThread.run()中止了。
#
re: 为程序加上“关闭钩子”(ShutdownHook)
@wfeng007
是的,谢谢指正。已更正。
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2006-03-13 18:48 编辑过
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
<
2006年3月
>
日
一
二
三
四
五
六
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
公告
版权声明:本博客所有文章仅适用于非商业性转载,并请在转载时注明出处及作者的署名。
天气预报
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(10)
给我留言
查看公开留言
查看私人留言
随笔分类
Database(11)
(rss)
Design Patterns(3)
(rss)
Hibernate(6)
(rss)
J2SE(5)
(rss)
Java Tool(9)
(rss)
Javascript(2)
(rss)
JSP Tags(3)
(rss)
Leisure (7)
(rss)
Software Engineering(1)
(rss)
Spring(1)
(rss)
Struts
(rss)
随笔档案
2008年6月 (1)
2008年1月 (2)
2007年10月 (2)
2007年9月 (1)
2007年8月 (2)
2007年7月 (4)
2007年3月 (4)
2007年2月 (3)
2007年1月 (9)
2006年11月 (1)
2006年10月 (3)
2006年9月 (4)
2006年8月 (4)
2006年7月 (21)
2006年6月 (1)
2006年5月 (3)
2006年4月 (5)
2006年3月 (4)
2006年2月 (2)
相册
日志图片
收藏夹
Java基础(11)
(rss)
Linux(1)
(rss)
Web相关(1)
(rss)
XML(2)
(rss)
工作流(1)
(rss)
开源软件(4)
(rss)
数据库(5)
(rss)
界面相关(10)
(rss)
职场|生活(2)
(rss)
设计模式(1)
(rss)
博客
CleverPig
DBA
(rss)
KINGFISH和蜗牛的家
Michael Chen
Buffalo的作者
SP之窗
Steady
A jsf zone
Vetula chris kelley
An american web developer living in cape town, south africa
成都心情(Full Speed)
曹晓钢
满江红.开源
杨杰荣的博客
竹笋炒肉 Hedong's Blog
良葛格
车东
透明思考
gigix的专栏
文档
Hibernate中文参考文档
MySQL中文参考手册
Ruby参考手册
Spring中文参考手册
SWT Tutorial
XPath教程
XSLT教程
站点
IBM中国 Java
Java Research
JR - 汇聚技术精英,增进技术交流
JavaBlogs
java-source
JavaWorld
国外一个老牌的java站点
JavaWorld@TW
一个台湾的java论坛,很多高手
Java家
中文Java门户
Java开源大全
Manning Publications
Action系列丛书的出版社
Matrix
Matrix - 与 Java 共舞
Ruby中文网
SourceForge
中国Java开发网
天堂鸟技术学院
SP论坛天堂鸟技术学院
移动增值服务网
移动增值服务网- 移动SP世界
论坛
Java视线论坛
小文论坛
很多Linux资料的论坛
无忧脚本
搜索
积分与排名
积分 - 99584
排名 - 80
最新评论
1. re: DisplayTag 1.1 Released,可分页读取数据!!![未登录]
太少了,请问到某一页操作后(对数据库)还回到操作页。
--navy
2. re: Displaytag1.1大数据量分页的例子[未登录]
晕 效果出来了 ,可是下边不知道 为什么多了一行 空行 ,郁闷啊!: (
--zz
3. re: 在javascript中实现继承关系
aaaaa
--ss
4. re: 某计算机系女生編的C語言程序
呵呵!用编程反映了这个社会的事实!
--顾城
5. re: Displaytag (partialList ="true") 分页例子子[未登录]
赌东道大幅度发达撒
--小红
阅读排行榜
1. [Log4j] 配置Log4j(9709)
2. DisplayTag 1.1 Released,可分页读取数据!!!(7988)
3. 使用POI生成Excel文件(4676)
4. 使用Eclipse调试tomcat上的web应用(4011)
5. Displaytag1.1大数据量分页的例子(3844)
评论排行榜
1. Displaytag1.1大数据量分页的例子(20)
2. DisplayTag 1.1 Released,可分页读取数据!!!(13)
3. 将Java应用注册为后台服务(10)
4. 在javascript中实现继承关系(6)
5. [Log4j] 配置Log4j(6)