2016-04-24 48 views
-4

我有一个计时器类,我想计划运行30分钟,并从周六的12点到周日午夜每隔一小时执行一次。Java定时器每小时都会关闭周六至周日

我该怎么做呢?

谢谢。

+0

你是在谈论java.util.Timer,javax.swing.Timer还是其他的东西? –

+0

@StephenC我在说java.util.Timer,抱歉没有指定。 – quibblify

回答

0

java.util.Timer类不具备的功能来做到这一点使用重复的任务:

  • 您不能配置一个Timer到>>停止< <在给定时间
  • 执行模型运行重复任务重复的任务是“固定延迟执行”;即基于前一任务的结束点来调度新的任务。这会导致时间延迟...如果任务需要很长时间。

简单的解决方案是:

  • 在一个循环中创建单个Timer对象
  • 使用schedule(TimerTask task, Date time)调度48个独立的任务,因为您所需要的范围内开始在每个小时。

根据javadoc,Timer是可扩展的,应该能够有效地处理大量计划任务。


以上不处理每个任务运行30分钟的要求。目前还不清楚这实际上意味着什么,但是如果您希望任务在30分钟内运行不超过,那么您需要实现一个“看门狗”,当它的时间到了时,它将中断运行任务的线程。该任务需要被执行以适当地检查和/或处理线程中断。

-1

你可以有一个循环运行,并在循环只是睡一个小时或不管你想要多长时间。会有这样的工作吗?

for(int i = 0; i < 24; i++) { 
    // do whatever you want to do 
    try { 
    // Sleep for an hour 
    Thread.sleep(6000000); 
    catch(InterruptedException e) { 
    e.printStackTrace(); 
    } 
} 

我可能误解了这个问题...但如果这就是你想要的东西..然后...耶?

相关问题