📅  最后修改于: 2023-12-03 15:05:05.245000             🧑  作者: Mango
ScheduledExecutorService接口是Java 5中新增的接口之一。它是ExecutorService接口的子接口,可以在指定时间之后或者定时执行任务。
ScheduledExecutorService接口继承了ExecutorService接口,它是用来执行延迟或周期性任务的。ScheduledExecutorService接口中定义了两个方法来执行这些任务:
schedule(Runnable command, long delay, TimeUnit unit):在指定的延迟时间之后,执行一次指定的任务。
scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit): 在指定的首次延迟之后,定期执行该任务。即:执行完成该任务后,接着在指定时间间隔周期性地执行该任务。
ScheduledExecutorService接口提供了一种快速创建实例的方法——Executors类的newScheduledThreadPool方法,它返回的是一个ScheduledExecutorService对象。其具体语法为:
ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(corePoolSize);
其中,corePoolSize是线程池的核心线程数。如果超过了核心线程数,任务将进入任务队列等待执行。
在创建了ScheduledExecutorService对象后,就可以通过schedule()方法或scheduleAtFixedRate()方法来执行任务。例如:
scheduledExecutorService.schedule(new Runnable() {
public void run() {
System.out.println("任务已经被执行!");
}
}, 1000, TimeUnit.MILLISECONDS);
scheduledExecutorService.scheduleAtFixedRate(new Runnable() {
public void run() {
System.out.println("任务已被执行!");
}
}, 1000, 3000, TimeUnit.MILLISECONDS);
上面的代码中,第一个任务会在1秒之后执行一次,而第二个任务会在1秒之后首次执行,然后之后每隔3秒执行一次。
当ScheduledExecutorService对象不再需要使用时,需要手动关闭它,以释放线程和其他资源。可以调用shutdown()方法,它将等待所有任务执行完成后再关闭ScheduledExecutorService对象。也可以调用shutdownNow()方法,它将尝试停止所有正在执行的任务并关闭ScheduledExecutorService对象。
scheduledExecutorService.shutdown();
ScheduledExecutorService接口提供了方便的延迟执行或周期性执行任务的功能,并且在Java中广泛使用。掌握ScheduledExecutorService接口的使用方法,能够更好地实现程序的定时和周期性执行任务的功能,提高程序的可靠性和稳定性。