小编典典

Java Timer vs ExecutorService?

all

我有代码,我使用java.util.Timer.
我环顾四周,看到ExecutorService可以做同样的事情。所以这里的这个问题,你有没有使用TimerExecutorService安排任务,一个使用比另一个有什么好处?

还想检查是否有人使用过该Timer课程并遇到ExecutorService为他们解决的任何问题。


阅读 94

收藏
2022-04-26

共1个答案

小编典典

根据实践中的Java并发

  • Timer可以对系统时钟的变化敏感,ScheduledThreadPoolExecutor不是。
  • Timer只有一个执行线程,所以长时间运行的任务会延迟其他任务。ScheduledThreadPoolExecutor可以配置任意数量的线程。此外,如果需要(通过提供ThreadFactory),您可以完全控制创建的线程。
  • 抛出的运行时异常TimerTask杀死一个线程,从而使Timer死:-( … 即计划任务将不再运行。ScheduledThreadExecutor不仅捕获运行时异常,而且它允许您在需要时处理它们(通过覆盖afterExecute方法 from ThreadPoolExecutor)。任务抛出的异常将被取消,但其他任务将继续运行。

如果您可以使用ScheduledThreadExecutor代替Timer,请这样做。

还有一件事......虽然ScheduledThreadExecutor在 Java 1.4 库中不可用,但有一个JSR 166 (
java.util.concurrent) 到 Java 1.2, 1.3, 1.4
的反向移植,它具有ScheduledThreadExecutor该类。

2022-04-26