定时任务接口ScheduledExecutorService

来源:互联网 发布:cpc广告发布网站源码 编辑:程序博客网 时间:2024/05/22 15:38
class MyScheduledExecutor implements Runnable {
    
    private String jobName;
    
    MyScheduledExecutor() {
        
    }
    
    MyScheduledExecutor(String jobName) {
        this.jobName = jobName;
    }


    @Override
    public void run() {
        
        System.out.println(jobName + " is running");
    }

}


public static void main(String[] args) {        ScheduledExecutorService service = Executors.newScheduledThreadPool(10);                long initialDelay = 1;        long period = 1;        // 从现在开始1秒钟之后,每隔1秒钟执行一次job1        service.scheduleAtFixedRate(new MyScheduledExecutor("job1"), initialDelay, period, TimeUnit.SECONDS);                // 从现在开始2秒钟之后,每隔2秒钟执行一次job2        service.scheduleWithFixedDelay(new MyScheduledExecutor("job2"), initialDelay, period, TimeUnit.SECONDS);    }


ScheduledExecutorService 中两种最常用的调度方法 ScheduleAtFixedRate 和 ScheduleWithFixedDelay。ScheduleAtFixedRate 每次执行时间为上一次任务开始起向后推一个时间间隔,即每次执行时间为 :initialDelay, initialDelay+period, initialDelay+2*period, …;ScheduleWithFixedDelay 每次执行时间为上一次任务结束起向后推一个时间间隔,即每次执行时间为:initialDelay, initialDelay+executeTime+delay, initialDelay+2*executeTime+2*delay。由此可见,ScheduleAtFixedRate 是基于固定时间间隔进行任务调度,ScheduleWithFixedDelay 取决于每次任务执行的时间长短,是基于不固定时间间隔进行任务调度。

原创粉丝点击