java线程问题,正确的方法?

时间:2012-10-16 14:01:38

标签: java multithreading datediff

我正在创建一个将在后台连续运行的java服务,该服务的工作是在特定日期创建表的副本。确切地说,我从一些表中读取数据,如果表中的record_date与当前日期匹配,我需要创建表副本。然后服务应该睡到下一个运行日期。下一个运行日期也可以通过查看表中的记录来确定。

目前,我是如何做到这一点的,是创建一个在while(true)循环中运行的线程。当线程完成执行任务,即创建表副本时,我使用Thread.sleep()将其置于休眠状态,直到下次需要运行。线程休眠的毫秒数,我通过取当前日期(线程执行任务的日期)与下一个运行日期之间的差值来计算。

这是正确的方法,对于这个特定场景使用thread.sleep()是正确的吗?我这样说是因为线程的下一个运行日期可能是三个月甚至一年之后。如果我在这里不是很清楚,也请告诉我。

3 个答案:

答案 0 :(得分:2)

如何解剖这两项行动?

  1. 编写一个Java作业,在调用表中的日期时创建一个副本。
  2. 安排java作业以您希望的方式运行。
  3. 因为我们UNIX所以cron帮助我们做了很多这样的任务。

答案 1 :(得分:0)

查看Lock interface。这是wait()notify()的抽象,这是您应该使用的,而不是sleep()

answer here说明原因。

答案 2 :(得分:0)

查看Java Timer API或Quartz库