在特定时间运行java线程

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分钟运行?

Enn*_*oji 9

您可以让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)