📜  ScheduledThreadPoolExecutor类(1)

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

ScheduledThreadPoolExecutor类

ScheduledThreadPoolExecutor类是ExecutorService接口的扩展,用于调度执行任务。它允许您按指定的初始延迟和周期执行任务。该类创建了一个线程池,其中的线程可以重复执行给定的任务,或仅执行一次。

优点
  • 支持周期性任务的执行
  • 允许您配置延迟执行任务
  • 允许您控制线程池大小和创建新线程的方式
  • 提供方便的shutdown和shutdownNow方法终止任务
如何使用

创建一个ScheduledThreadPoolExecutor对象,然后使用scheduleAtFixedRate方法或scheduleWithFixedDelay方法安排重复执行任务,或使用schedule方法安排一次性执行任务。

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(10);
executor.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        // 重复执行任务
    }
}, 0, 1, TimeUnit.SECONDS);

executor.scheduleWithFixedDelay(new Runnable() {
    @Override
    public void run() {
        // 延迟执行任务
    }
}, 0, 1, TimeUnit.SECONDS);

executor.schedule(new Runnable() {
    @Override
    public void run() {
        // 一次性执行任务
    }
}, 1, TimeUnit.SECONDS);
参数说明
  • corePoolSize:线程池中的核心线程数。
  • maximumPoolSize:线程池中的最大线程数。
  • keepAliveTime:非核心线程在终止之前等待新任务的最长时间。
  • unitkeepAliveTime的时间单位。
  • ThreadFactory:线程工厂,用于创建新线程。
  • RejectedExecutionHandler:当队列和线程池都满时,用于处理新任务的拒绝策略。
相关方法
  • scheduleAtFixedRate: 安排一个以固定速率执行的周期性任务。
  • scheduleWithFixedDelay: 安排一个以固定延迟执行的周期性任务。
  • schedule: 安排一次性执行的任务。
  • shutdown: 向线程池中的所有任务发出关闭请求,但不会阻止执行任务。在终止前允许执行以前提交的任务。
  • shutdownNow: 尝试停止所有正在执行的任务,并且停止等待执行的任务的处理。这个方法只是尝试停止任务,并不保证一定能停止所有正在执行的任务。
总结

ScheduledThreadPoolExecutor类非常适合在固定延迟或周期下执行重复任务,特别是在需要调度多个任务时。它还提供了灵活的线程池配置和任务控制,可以简化开发人员的工作,提高代码的可读性和可维护性。