我用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延迟。
请帮助我使用适当的类更好地编写代码
我只提供了我的代码工作流程的概念,如果我要提供更多信息,请告诉我。
谢谢
答案 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