Java Timer vs ExecutorService?

问题:

我有代码,我使用java.util.timer调度任务。我正在环顾四周,看到ExecutorService可以做同样的事情。所以这个问题在这里,你是否使用Timer和ExecutorService来安排任务,一个使用超过另一个的好处是什么?
还想检查是否有人使用Timer类,遇到ExecutorService为他们解决的任何问题。

回答:

根据Java Concurrency in Practice

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

如果您可以使用ScheduledThreadExecutor而不是Timer,请执行此操作。
还有一件事,而在Java 1.4库中ScheduledThreadExecutor不可用,则有一个Backport of JSR 166 (java.util.concurrent) to Java 1.2, 1.3, 1.4,它具有ScheduledThreadExecutor类。

 
 
Code问答: http://codewenda.com/topics/python/
Stackoverflow: Java Timer vs ExecutorService?

*转载请注明本文链接以及stackoverflow的英文链接

发表评论

电子邮件地址不会被公开。 必填项已用*标注

8 + 1 =