java指定时间执行某方法

ScheduledExecutorService,是基于线程池设计的定时任务类,每个调度任务都会分配到线程池中的一个线程去执行,也就是说,任务是并发执行,互不影响。

需要注意,只有当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是处于轮询任务的状态。

public static void main(String[] args) {
        ScheduledExecutorService service = Executors.newScheduledThreadPool(10);
        
        long initialDelay = 1;
        long period = 1;
        // 从现在开始1秒钟之后,每隔1秒钟执行一次  scheduleAtFixedRate(run,delay,period,TimeUnit.SECONDS) 
        // run为具体要执行的方法,delay为延迟多少时间来执行run方法,period为间隔多长时间来重复执行run方法,TimeUnit.SECONDS为delay和period的单位是秒
        service.scheduleAtFixedRate(new Runnable(){run方法}, initialDelay, period, TimeUnit.SECONDS);
        
        // 从现在开始2秒钟之后,每隔2秒钟执行一次job2  
        service.scheduleWithFixedDelay(new Runnable(){run方法}, 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 取决于每次任务执行的时间长短 ,是基于不固定时间间隔进行任务调度。


版权声明:本文为GerogeHotz原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。