一个线程需要在任何情况下退出都必须执行一段程序改怎么写?

wsxqaz 2012-09-04 10:06:24
如果线程正常退出当然不会有什么问题,但是现在的问题是线程很可能不能正常退出,而是由其他组件强制断掉的(比如调用interrupt),现在的问题是这个线程会创建一个socket正常退出后会执行close方法,但是非正常退出后就无法预判了。我使用finalize方法但是从说明中看到不能寄希望这个方法一定会执行,但是我这里必须要执行还有什么方法可以
...全文
215 5 打赏 收藏 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
beiouwolf 2012-09-04
  • 打赏
  • 举报
回复
socket这种假设你的程序被关闭了,这条socket也会被自动断掉
java基本上是没有资源清理的问题
实在需要程序钩子的话,有个 Runtime.getRuntime().addShutdownHook(Thread);方法
接收参数是一个线程,这个线程会在程序被终止时自动执行
我一般用ShutdownHook来做一些队列序列化之类的操作
zxhcloth 2012-09-04
  • 打赏
  • 举报
回复
只要是程序让它退出的,不管正常还是非正常都可以通过try..finally里的finally满足你的要求。
但是如果是外界强制退出的,比如kill进程,那是没有办法的。
除非你写个监控程序,一直监控着正运行的进程或线程,当一段时间没响应后(就认为已死或飞正常退出),由这个监控程序去执行你要的操作,不过这也有局限性,有些操作还是不能操作。
MiceRice 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
run里用try...finally
[/Quote]

支持一把。也就是把所有执行代码放在 try 之内,那些必须负责收尾的代码放在 finally 之内。
龙四 2012-09-04
  • 打赏
  • 举报
回复
如果是用的线程池,可以重写ThreadPoolExecutor的afterExecute方法
龙四 2012-09-04
  • 打赏
  • 举报
回复
run里用try...finally

62,620

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧