温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

ExecutorService如何定时执行

发布时间:2026-09-16 01:33:55 来源:亿速云 阅读:100 作者:小樊 栏目:编程语言

在 Java 中,ExecutorService 本身并不支持“定时执行”,它主要用于线程池管理任务执行。
如果你需要定时 / 周期性执行任务,应该使用 ScheduledExecutorService(它是 ExecutorService 的子接口)。


一、使用 ScheduledExecutorService(推荐 ✅)

1️⃣ 创建定时线程池

ScheduledExecutorService scheduler =
        Executors.newScheduledThreadPool(2);

2️⃣ 延迟执行一次(类似 Timer)

scheduler.schedule(() -> {
    System.out.println("延迟 5 秒执行");
}, 5, TimeUnit.SECONDS);

3️⃣ 固定频率执行(period 从上一次开始时间算)

scheduler.scheduleAtFixedRate(() -> {
    System.out.println("每 3 秒执行一次");
}, 0, 3, TimeUnit.SECONDS);

⚠️ 如果任务执行时间 > period,会连续执行(不重叠排队)


4️⃣ 固定延迟执行(delay 从上一次结束时间算)

scheduler.scheduleWithFixedDelay(() -> {
    System.out.println("任务结束后再等 3 秒执行");
}, 0, 3, TimeUnit.SECONDS);

✅ 更适合“任务耗时不稳定”的场景


5️⃣ 关闭定时线程池

scheduler.shutdown();
// 或
scheduler.shutdownNow();

二、scheduleAtFixedRate vs scheduleWithFixedDelay 区别

方法 时间计算方式 适用场景
scheduleAtFixedRate 上一次开始 精确周期(如心跳)
scheduleWithFixedDelay 上一次结束 任务耗时不稳定

三、ExecutorService 为什么不能定时?

  • ExecutorService 只提供:
    • execute()
    • submit()
  • 没有时间调度能力
  • 定时能力在 ScheduledExecutorService

四、总结(记住一句话)

定时执行任务 → 用 ScheduledExecutorService,不要用 ExecutorService

如果你愿意,我也可以帮你:

  • 写 Spring @Scheduled 对比
  • 写 动态定时任务
  • 写 任务异常如何处理
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手