java.util.Timer:它被弃用了吗?

2022-09-02 20:04:07

我在评论中阅读了这个答案,并在许多其他关于调度(抱歉,没有引用)的问题中阅读了已弃用的问题。我真的希望不是,因为我用它作为在Java中调度事情的轻松方式(而且它工作得很好)。但是,如果它被弃用,我会去别处看看。但是,快速浏览一下 1.6 的 API 文档并不能说明它被弃用了。它甚至没有在Sun的弃用列表中提到。java.util.Timer

它是否被正式弃用*,如果是这样,我应该使用什么来代替?


*另一方面,如果它没有被弃用,人们能停止对这个无辜的、实现出色的集合类说坏话吗?


答案 1

正如其他人所提到的,不,它没有被弃用,但我个人总是使用SchpectedExecutorService代替,因为它提供了更丰富的API和更大的灵活性:

  • ScheduledExecutorService允许您指定线程数,而始终使用单个线程。Timer
  • ScheduledExecutorService可以使用 ThreadFactory 进行构造,允许控制名称/守护程序状态以外的线程方面(例如优先级、、)。ThreadGroupUncaughtExceptionHandler
  • ScheduledExecutorService允许以固定延迟和固定速率安排任务。
  • ScheduledExecutorService接受/因为它是工作单元,这意味着你不需要专门使用它的子类;即,您可以将相同的实现提交给常规或.CallableRunnableTimerTaskCallableExecutorServiceScheduledExecutorService

答案 2

我认为这是一个误解。Timer 类的 JavaDoc 提到并指出,该类实际上是 Timer/TimerTask 组合的更通用的替代品。没有别的。计时器未弃用。ScheduledThreadPoolExecutor

JavaDoc的另一句话,ScheduledThreadPoolExecutor这次:

一个 ThreadPoolExecutor,它可以另外安排命令在给定延迟后运行或定期执行。当需要多个工作线程时,或者当需要 ThreadPoolExecutor(此类扩展)的额外灵活性或功能时,此类比 Timer 更可取。