一尘不染

Java Timer与ExecutorService?

java

我有使用计划任务的代码java.util.Timer。我环顾四周,发现ExecutorService可以做到这一点。因此,这里有一个问题,你是否使用过TimerExecutorService安排了任务,一次使用比另一次使用有什么好处?

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


阅读 383

收藏
2020-02-26

共1个答案

一尘不染

根据实践中的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的ScheduledThreadExecutor类。

2020-02-26