【发布时间】:2012-10-06 15:41:54
【问题描述】:
我正在创建一个将在后台持续运行的 java 服务,该服务的工作是在特定日期创建表的副本。确切地说,我从某个表中读取数据,如果表中的 record_date 与当前日期匹配,我需要创建表副本。然后服务应该休眠到下一个运行日期。下一次运行的日期也是通过查看表中的记录来确定的。
目前,我如何做到这一点,是创建一个在 while(true) 循环中运行的线程。并且当线程完成执行任务(即创建表副本)时,我使用 Thread.sleep() 让它进入睡眠状态,直到下次它需要运行。线程休眠的毫秒数,我通过取当前日期(线程执行任务的日期)和下一次运行日期之间的差异来计算。
这是正确的方法吗,在这种特殊情况下使用 thread.sleep() 是正确的吗?我这样说是因为线程的下一次运行日期可能在三个月甚至一年之后。如果我在这里不是很清楚,也请告诉我。
【问题讨论】:
-
也许使用 wait() 和 notify()。
-
我认为你的
Thread.sleep(...)机制很好。 -
@jsn 我也想过,但问题是通知等待线程的内容,当当前日期等于record_date(来自db)时需要调用它。为了检测到该事件的发生,必须有一些连续的检查,至少每天一次。我更喜欢线程或进程休眠直到它需要实际执行并且不通过连续执行消耗系统资源的解决方案。
-
@wazzz 我明白了。但只是个人意见,如果你在线程中使用睡眠,你几乎总是在做错线程。
-
@jsn 我认为你是对的,这正是我问一个问题的原因。让我们看看我是否从某个可能不需要使用 sleep(...) 并且同时不需要连续执行的人那里得到解决方案:)
标签: java multithreading datediff