用Java调度任务

时间:2011-06-27 17:17:07

标签: java multithreading

我用Java编写了一个代码,如下所示:

....
while (conditionX) {
  //fetch m
  ....
  t = new Thread(new SomeRunnable(m));
  t.start();
  Thread.sleep(500);
}
....

class SomeRunnable implements Runnable {
  String msisdn;
  public SomeRunnable (String m) {
    msisdn = m;
  }
  @Override
  public void run() {
    do {
      //Statement block S uses msisdn, sets condition Y
      Thread.sleep(30000);    
    } while (conditionY);
  }
}

我对代码中使用的Thread.sleep()号码感到不舒服。为了避免这种情况,我尝试了ScheduledExecutor等,但却无法找到一种方法来做我想做的事 在新线程启动之前我需要半秒延迟,并且在线程中,在再次尝试语句块S之前必须有 30s延迟

请帮助我使用适当的类更好地编写代码 我只提供了我的代码工作流程的概念,如果我要提供更多信息,请告诉我。

谢谢

2 个答案:

答案 0 :(得分:6)

您可以实施TimerTask并覆盖run()。然后,您可以定期安排任务:

Timer myTimer = new Timer();
timer.scheduleAtFixedRate(new MyTimerTask(), 500L, 30000L);

如果您想取消任务,可以拨打cancel()

来取消

答案 1 :(得分:0)

如果您使用Spring配置bean,您可以专注于实现业务逻辑,并利用Spring的钩子来管理任务,日程安排等。

http://static.springsource.org/spring/docs/1.2.x/reference/scheduling.html