📜  ScheduledExecutorService接口(1)

📅  最后修改于: 2023-12-03 15:05:05.245000             🧑  作者: Mango

ScheduledExecutorService接口

ScheduledExecutorService接口是Java 5中新增的接口之一。它是ExecutorService接口的子接口,可以在指定时间之后或者定时执行任务。

基本介绍

ScheduledExecutorService接口继承了ExecutorService接口,它是用来执行延迟或周期性任务的。ScheduledExecutorService接口中定义了两个方法来执行这些任务:

  1. schedule(Runnable command, long delay, TimeUnit unit):在指定的延迟时间之后,执行一次指定的任务。

  2. scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit): 在指定的首次延迟之后,定期执行该任务。即:执行完成该任务后,接着在指定时间间隔周期性地执行该任务。

使用方法
创建ScheduledExecutorService对象

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对象

当ScheduledExecutorService对象不再需要使用时,需要手动关闭它,以释放线程和其他资源。可以调用shutdown()方法,它将等待所有任务执行完成后再关闭ScheduledExecutorService对象。也可以调用shutdownNow()方法,它将尝试停止所有正在执行的任务并关闭ScheduledExecutorService对象。

scheduledExecutorService.shutdown();
总结

ScheduledExecutorService接口提供了方便的延迟执行或周期性执行任务的功能,并且在Java中广泛使用。掌握ScheduledExecutorService接口的使用方法,能够更好地实现程序的定时和周期性执行任务的功能,提高程序的可靠性和稳定性。