Ric*_*mon 7 java concurrency multithreading
我有一个Web应用程序,每小时四次与中央数据库同步.这个过程通常需要2分钟.我想将此过程作为X:55,X:10,X:25和X:40的线程运行,以便用户知道在X:00,X:15,X:30和X:45他们有一个干净的数据库副本.这只是关于管理期望.我已经完成了执行程序,java.util.concurrent
但调度已完成scheduleAtFixedRate
,我相信并不能保证何时实际按小时运行.我可以使用第一次延迟启动,Runnable
以便第一次延迟接近发射时间和每15分钟的时间表,但似乎这可能会在时间上发生分歧.是否有更简单的方法来安排线程在每个季度之前5分钟运行?
您可以让Runnable计划"下次运行".
如,
class Task implements Runnable {
private final ScheduledExecutorService service;
public Task(ScheduledExecutorService service){
this.service = service;
}
public void run(){
try{
//do stuff
}finally{
//Prevent this task from stalling due to RuntimeExceptions.
long untilNextInvocation = //calculate how many ms to next launch
service.schedule(new Task(service),untilNextInvocation,TimeUnit.MILLISECONDS);
}
}
}
Run Code Online (Sandbox Code Playgroud)