日期:2014-05-20  浏览次数:20902 次

一个线程需要在任何情况下退出都必须执行一段程序改怎么写?
如果线程正常退出当然不会有什么问题,但是现在的问题是线程很可能不能正常退出,而是由其他组件强制断掉的(比如调用interrupt),现在的问题是这个线程会创建一个socket正常退出后会执行close方法,但是非正常退出后就无法预判了。我使用finalize方法但是从说明中看到不能寄希望这个方法一定会执行,但是我这里必须要执行还有什么方法可以

------解决方案--------------------
run里用try...finally
------解决方案--------------------
如果是用的线程池,可以重写ThreadPoolExecutor的afterExecute方法
------解决方案--------------------
探讨
run里用try...finally

------解决方案--------------------
只要是程序让它退出的,不管正常还是非正常都可以通过try..finally里的finally满足你的要求。
但是如果是外界强制退出的,比如kill进程,那是没有办法的。
除非你写个监控程序,一直监控着正运行的进程或线程,当一段时间没响应后(就认为已死或飞正常退出),由这个监控程序去执行你要的操作,不过这也有局限性,有些操作还是不能操作。
------解决方案--------------------
socket这种假设你的程序被关闭了,这条socket也会被自动断掉
java基本上是没有资源清理的问题
实在需要程序钩子的话,有个 Runtime.getRuntime().addShutdownHook(Thread);方法
接收参数是一个线程,这个线程会在程序被终止时自动执行
我一般用ShutdownHook来做一些队列序列化之类的操作