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

Dan*_*ark 17 java timer

我在评论中读到了这个答案以及许多其他关于java.util.Timer不推荐使用的调度(抱歉,没有引用)的问题.我真的希望不要因为我使用它作为在Java中安排事情的轻松方式(并且它工作得很好).但如果它被弃用了,我会去别处看看.但是,快速查看1.6API文档并没有说明它被弃用的任何内容.在Sun的弃用清单中甚至没有提到它.

是否正式弃用*如果是这样,我应该使用什么呢?


*另一方面,如果它没有被弃用,那么人们是否可以停止对这个无辜且精彩实施的集合类进行诋毁?

Ada*_*ski 15

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

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

  • 假设您使用单个线程创建ScheduledExecutorService,您很可能会看到性能上的任何差异(尽管Timer包含其自己的优先级队列实现). (3认同)

And*_*s_D 7

我认为这是一种误解.Timer类的JavaDoc提到ScheduledThreadPoolExecutor并注意到,这个类实际上是 Timer/TimerTask组合的更通用的替代品.没有其他的.不推荐使用Timer.

这次来自JavaDoc,ScheduledThreadPoolExecutor的另一个引用:

ThreadPoolExecutor,可以额外调度命令在给定延迟后运行,或定期执行.当需要多个工作线程时,或者当需要ThreadPoolExecutor(此类扩展)的额外灵活性或功能时,此类优于Timer.


Bri*_*new 6

不,不是全部.您可能希望使用其他机制(如Quartz)来满足更复杂的计时器要求,但Timer可以很好地工作,并且不会去任何地方.


Mar*_*tin 4

JDK\xe2\x80\x99s bug 跟踪器中有[JDK-8154799] 弃用 Timer 和 TimerTask,并且在 2016 年中期JEP 277中指出java.util.Timer( 和TimerTask) 将在 JDK 9 中弃用。

\n\n
\n

一些 Java SE API 将添加、更新或删除 @Deprecated 注释。下面列出了此类更改的一些示例。

\n\n

[\xe2\x80\xa6]

\n\n
    \n
  • 添加 @Deprecated 到java.util.TimerTimerTask
  • \n
\n
\n\n

但是,在 JDK 9 版本中,这些类并未被弃用(已弃用的类可以在弃用列表中找到)。

\n