Java计划任务Timer与ExecutorService的区别

一、概述

我有使用计划任务的代码java.util.Timer我发现ExecutorService可以做到这一点。因此,这里有一个问题,您是否使用过TimerExecutorService安排任务,他们之间有什么好处?

二、详解

根据实践中的Java并发性:

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

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

还有一点……虽然ScheduledThreadExecutorJava 1.4库中没有,但是有一个JSR 166(java.util.concurrent)向Java 1.2、1.3、1.4的Backport,它具有ScheduledThreadExecutor该类。

如若转载,请注明出处:https://www.javaidea.cn/article/8293.html

(0)
上一篇 2022年2月7日 上午10:03
下一篇 2022年2月7日 上午10:03

相关推荐

发表评论

您的电子邮箱地址不会被公开。