1.ScheduledExecutorService可以实现循环和延迟任务
ScheduledExecutorService 和 Timer 的区别
Timer的内部只有一个线程,如果有多个任务的话就会顺序执行,这样我们的延迟时间和循环时间就会出现问题。
当需要延迟任务与循环任务的时候可以考虑ScheduledExecutorService
通过静态方法创建ScheduledExecutorService
ScheduledExecutorService service = Executors.newScheduledThreadPool(1);
当调度任务来的时候,ScheduledExecutorService才会真正启动一个线程,其余时间ScheduledExecutorService都是出于轮询任务的状态。
ScheduleAtFixedRate 和 ScheduleWithFixedDelay的区别
ScheduleAtFixedRate固定时间间隔的时间调度,即今天八点开始执行,接着每隔两天执行一次即为固定时间间隔执行任务
ScheduleWithFixedDelay取决于每次任务执行的时间长短进行,下一次任务的开始执行完全取决于上一次任务的执行。基于不固定的时间间隔进行任务调度。
service.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
}
}, initDelayDay, delayDay, TimeUnit.SECONDS);
initDelayDay表示执行的开始时间
delayDay表示相隔多少时间后执行
TimeUnit.SECONDS以秒为单位进行执行