用Java调度任务

shy*_*yam 2 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);
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢

Jon*_*nas 6

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

Timer myTimer = new Timer();
timer.scheduleAtFixedRate(new MyTimerTask(), 500L, 30000L);
Run Code Online (Sandbox Code Playgroud)

如果要取消任务,可以通过调用来完成 cancel()