gpt4 book ai didi

Java Timer vs ExecutorService?

转载 作者:bug小助手 更新时间:2023-10-28 10:39:54 24 4
gpt4 key购买 nike

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

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

最佳答案

根据Java Concurrency in Practice :

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

如果您可以使用 ScheduledThreadExecutor 而不是 Timer,请这样做。

还有一件事...虽然 ScheduledThreadExecutor 在 Java 1.4 库中不可用,但有一个 Backport of JSR 166 (java.util.concurrent) to Java 1.2, 1.3, 1.4 ,它有 ScheduledThreadExecutor 类。

关于Java Timer vs ExecutorService?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/409932/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com