当前位置: 首页 > article >正文

ScheduledExecutorService详解

   ScheduledExecutorService 是 Java 并发工具包 (java.util.concurrent) 中的一个接口,用于在指定的延迟后执行任务,或者以固定的时间间隔周期性执行任务。它是 ExecutorService 的子接口,提供了更强大的调度功能。

ScheduledExecutorService 提供了以下主要方法:

1.核心方法:scheduleAtFixedRate(Runnable command, long initialDelay, long period, TimeUnit unit)

  • 方法解释:是以上一个任务开始的时间计时,比如period为5,那5秒后,检测上一个任务是否执行完毕,如果上一个任务执行完毕,则当前任务立即执行,如果上一个任务没有执行完毕,则需要等上一个任务执行完毕后立即执行,如果你的任务执行时间超过5秒,那么任务时间间隔参数将无效,任务会不停地循环执行,由此可得出该方法不能严格保证任务按一定时间间隔执行

  • 参数:

    参数名称

    作用

    command

    要执行的任务(Runnable

    initialDelay

    初始延迟时间

    delay

    任务执行间隔

    unit

    时间单位。

public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        // 初始延迟 1 秒,之后每 2 秒执行一次任务
        scheduler.scheduleAtFixedRate(() -> {
            System.out.println("固定速率任务执行时间: " + System.currentTimeMillis());
        }, 1, 2, TimeUnit.SECONDS);

        // 让主线程等待一段时间,观察任务执行
        try {
            Thread.sleep(10000); // 等待 10 秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 关闭调度器
        scheduler.shutdown();
    }

2.核心方法:scheduleWithFixedDelay(Runnable command, long initialDelay, long delay, TimeUnit unit)

  • 以上一次任务执行结束时间为准,加上任务时间间隔作为下一次任务开始时间,由此可以得出,任务可以严格按照时间间隔执行

  • 参数:

    参数名称

    作用

    command

    要执行的任务(Runnable

    initialDelay

    初始延迟时间

    delay

    任务执行间隔

    unit

    时间单位。

public static void main(String[] args) {
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        // 初始延迟 1 秒,之后每次任务结束后延迟 2 秒再执行下一次任务
        scheduler.scheduleWithFixedDelay(() -> {
            System.out.println("固定延迟任务执行时间: " + System.currentTimeMillis());
            try {
                Thread.sleep(1000); // 模拟任务执行时间
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }, 1, 2, TimeUnit.SECONDS);

        // 让主线程等待一段时间,观察任务执行
        try {
            Thread.sleep(10000); // 等待 10 秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        // 关闭调度器
        scheduler.shutdown();
    }

 

3.核心方法:schedule(Runnable command, long delay, TimeUnit unit)

  • 在指定的延迟后执行一次任务。

  • 参数:

参数名称

作用

command

要执行的任务(Runnable

delay

延迟时间

unit

时间单位。

 public static void main(String[] args) {
        // 创建一个调度线程池
        ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);

        // 延迟 3 秒后执行任务
        scheduler.schedule(() -> {
            System.out.println("任务执行时间: " + System.currentTimeMillis());
        }, 3, TimeUnit.SECONDS);

        // 关闭调度器
        scheduler.shutdown();

 


http://www.kler.cn/a/466898.html

相关文章:

  • linux-centos-安装miniconda3
  • windows中硬件加速gpu计划开启cpu的使用率居高不下
  • NRF24L01模块STM32通信-通信初始化
  • lenovo联想IdeaPad 15sIML 2020款(81WB)笔记本电脑原装出厂OEM预装系统Windows10镜像下载
  • 远程主机执行脚本1、无脚本内容外协。
  • 1.1.1 认识时间复杂度
  • SpringBoot 2.6 集成es 7.17
  • 实现图的广度优先遍历(BFS)和深度优先遍历(DFS)
  • Tomcat(116) 如何在Tomcat中解决缓存问题?
  • 因果推断核心算法:倾向得分匹配法PSM
  • Linux(Centos 7.6)命令详解:cd
  • 《Rust权威指南》学习笔记(五)
  • 行业商机信息付费小程序系统开发方案
  • 25考研王道数据机构课后习题-----顺序表链表部分
  • 电脑压缩软件哪个好?15款压缩工具分类测评
  • 力扣459 重复的字符串
  • 2025 年春招互联网大厂226 道 Java 高级岗面试题
  • CMS网站管理系统如何选择CMS建站?
  • 使用python将多个Excel表合并成一个表
  • 合同与订单管理:CRM自动化的商业价值
  • 【强化学习】Double DQN(Double Deep Q-Network)算法
  • 个人博客自我介绍
  • 《机器学习》--线性回归模型详解
  • 什么是 GTest?
  • xml格式化(1):使用python的xml库实现自闭合标签
  • 青少年编程与数学 02-005 移动Web编程基础 12课题、移动表单