java.util.Timer没有任何异常情况下停止

3
我每2分钟都要去FTP上传新文件。我使用了java.util.Timer来实现它。但是在一段时间后 - 几天甚至一周 - 它会无任何异常或原因停止工作。
我发现了一个线程: Java unlimited thread stops after some time 但是里面没有特定的解决方案。我了解了ScheduledExecutorService,但据我所知 - 它与Timer相同。
请给我一些想法!

1
计时器在单独的线程上运行。如果发生任何异常,线程将停止。在run()或类似方法中捕获所有可抛出的异常,并将其输出到日志中。 - AlexWien
2个回答

0

我刚看到没有人回答这个问题,可能是因为这是一个重复的问题。

ScheduledExecutorService使用System.nanotime(),而Java.util.Timer使用System.currentTimeMillis()

System.currentTimeMillis()取决于系统时间,而System.nanotime()给出了自某个固定的任意初始时间以来的纳秒数,与系统时间无关。因此,系统时间的任何更改(由于NTP时间校正或系统待机)可能会影响计时器执行,也可能不会影响。这就是你的计时器失败的原因。

有关更多详细信息,请参见 - 如果时钟更改,Timertask.scheduleAtFixedRate应该做什么?


0
你可以尝试在主线程中使用 Thread.setDefaultUncaughtExceptionHandler() API 来设置默认的异常处理程序,并尝试记录任何可能被默默吞噬的可抛出异常。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接