我正在创建一个将在后台连续运行的java服务,该服务的工作是在特定日期创建表的副本。确切地说,我从一些表中读取数据,如果表中的record_date与当前日期匹配,我需要创建表副本。然后服务应该睡到下一个运行日期。下一个运行日期也可以通过查看表中的记录来确定。
目前,我是如何做到这一点的,是创建一个在while(true)循环中运行的线程。当线程完成执行任务,即创建表副本时,我使用Thread.sleep()将其置于休眠状态,直到下次需要运行。线程休眠的毫秒数,我通过取当前日期(线程执行任务的日期)与下一个运行日期之间的差值来计算。
这是正确的方法,对于这个特定场景使用thread.sleep()是正确的吗?我这样说是因为线程的下一个运行日期可能是三个月甚至一年之后。如果我在这里不是很清楚,也请告诉我。
答案 0 :(得分:2)
如何解剖这两项行动?
因为我们UNIX所以cron
帮助我们做了很多这样的任务。
答案 1 :(得分:0)
查看Lock
interface。这是wait()
和notify()
的抽象,这是您应该使用的,而不是sleep()
。
有answer here说明原因。
答案 2 :(得分:0)
查看Java Timer API或Quartz库