Java: Timer启用后无法停止?如何停止Timer

本人也遇到这个问题,好吧,就转载了:

利用Timer和TimerTask可以实现定时完成某些任务。

但是在运行过程中出现了很奇怪的现象:
所有TimerTask都完成了,按理说程序应该自动退出,但是它却没有!

我以为是Eclipse的bug,然后再cmd下尝试,同样是无法退出。

这种现象在只要new了一个Timer(),就会出现。

奇怪,谷歌了一下,找不到答案,但是找到零星的提问同样的问题的帖子。

还是自己动手看看帮助文档吧。。。

在JDK1.5的文档Timer类中,有这样一句话:
“对 Timer 对象最后的引用完成后,并且 所有未处理的任务都已执行完成后,计时器的任务执行线程会正常终止(并且成为垃圾回收的对象)。但是这可能要很长时间后才发生。”

但是这个“很长时间”是多长呢?一直等也没见它停止。。。

既然会成为垃圾回收的对象,那么我们就主动让系统回收一下吧。在每个TimerTask的run()方法最后加上一行代码:
System.gc();

然后再运行程序,搞定,正常了。

很自然会想到应该保证在Timer的最后一个TimerTask的最后调用gc(),但是经尝试发现只要在某一个TimerTask中调用过gc(),然后程序就能正常结束。并且gc()也不必放在最后。

http://www.douban.com/note/64661564/

你可能感兴趣的:(java)