跳至主要內容

忘记Jdk中的Timer

javajava大约 2 分钟

忘记Jdk中的Timer

在Java开发中,我们经常需要执行定时任务。JDK中提供了两种常用的定时任务工具:TimerScheduledExecutorService。虽然它们都可以用来执行定时任务,但是它们之间有很大的区别。在本文中,我们将比较TimerScheduledExecutorService之间的区别,并解释为什么我们应该尽可能地使用ScheduledExecutorService

Timer的缺陷

Timer是JDK 1.3中引入的一个定时任务工具。它通过一个单独的线程来执行定时任务。Timer有一些缺陷:

  • Timer只有一个线程来执行所有的定时任务。如果有多个定时任务需要执行,它们会排队等待Timer线程的执行。这意味着如果一个任务执行时间过长,将会影响其他任务的执行时间。
  • 如果定时任务抛出未捕获的异常,Timer线程也会被终止,从而导致所有任务都无法执行
  • Timer只能接受TimerTask类型的任务,这意味着如果我们需要执行Runnable类型的任务,就必须将其包装成TimerTask类型。这种包装可能会导致代码不够优雅和可读

为什么使用ScheduledExecutorService

ScheduledExecutorService是JDK 1.5中引入的一个定时任务工具。

  • 它通过线程池来执行定时任务。因此,它可以执行多个定时任务,每个任务都在自己的线程中执行。这意味着如果一个任务执行时间过长,不会影响其他任务的执行时间。
  • ScheduledExecutorService是线程安全的。如果一个任务抛出异常,ScheduledExecutorService将会继续执行其他任务,而不会中断整个线程池的执行。
  • ScheduledExecutorService还提供了更多的灵活性。它可以执行定时任务,也可以执行周期性任务,并且可以设置任务的延迟时间和执行间隔时间。

结论

虽然Timer是一个简单易用的定时任务工具,但是它存在很多缺陷,特别是在多个定时任务的情况下。因此,我们应该尽可能地使用ScheduledExecutorService来执行定时任务。ScheduledExecutorService是线程安全的,可以执行多个定时任务,并且提供了更多的灵活性。


版权申明

本站点所有内容,版权均归https://wenchao.renopen in new window所有,除非明确授权,否则禁止一切形式的转载协议

打赏

微信 支付宝

上次编辑于:
打赏
给作者赏一杯咖啡吧
您的支持将是我继续更新下去的动力
微信微信
支付宝支付宝