我有一个Java EE应用程序,每十五分钟从互联网上下载股票价格。从计时准确性的角度来看,最好是应用程序内化此周期性操作,即将Thread.sleep()
与计数器结合使用或设置计时器或者通过URL公开任务并拥有平台cron会更好作业定期点击URL(当然是按要求的频率)。
这两种方法的优点和缺点是什么?
我看到针对OpenJDK实现报告的计时器错误让我感到震惊。该错误表明,系统时间的变化会影响与时间相关的操作和方法(如睡眠和计时器周期)的操作。
答案 0 :(得分:2)
Timer
未被弃用,但现在有更好的替代方案:SheduledExecutorService
。使其更好的一个原因是它使用相对时间而不是绝对时间进行调度。
使用外部cron脚本或内部计时器只是一个问题或偏好,恕我直言。内部计时器更容易设置,但如果您已经安装了其他计算机,则可能需要使用另一个计时器,并将此职责放在一个位置。
答案 1 :(得分:1)
Thread.sleep
不是定期执行代码的推荐方法。这是不准确的,通常是糟糕设计的标志。我建议你使用Timer类来定期安排代码的执行。
答案 2 :(得分:1)
绝对考虑使用为该任务构建的调度作业。尝试从任何时序考虑中分离任务本身。