java.util.Timer:它是否已弃用?

java.util.Timer:它是否已弃用?,java,timer,Java,Timer,我在一篇关于调度的评论和许多其他问题(对不起,没有参考资料)中读到,java.util.Timer已被弃用。我真的希望不是这样,因为我正在使用它作为Java中轻松安排事情的方式(而且它工作得很好)。但如果它被弃用了,我会去别处看看但是,快速查看一下并没有说明它被弃用。Sun的文章中甚至没有提到它 它是否已被正式弃用*如果是,我应该使用什么替代? *另一方面,如果它没有被弃用,人们能不能停止诋毁这种天真的、出色实现的set-o-classes呢?在jdk1.6_10中,它没有被弃用,因此不需要其

我在一篇关于调度的评论和许多其他问题(对不起,没有参考资料)中读到,
java.util.Timer
已被弃用。我真的希望不是这样,因为我正在使用它作为Java中轻松安排事情的方式(而且它工作得很好)。但如果它被弃用了,我会去别处看看但是,快速查看一下并没有说明它被弃用。Sun的文章中甚至没有提到它

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



*另一方面,如果它没有被弃用,人们能不能停止诋毁这种天真的、出色实现的set-o-classes呢?

在jdk1.6_10中,它没有被弃用,因此不需要其他选择。

不,不是所有的。您可能希望使用其他机制,如更复杂的计时器要求,但计时器工作得非常好,不会有任何进展。

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

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

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


不,它没有被弃用。除了Sun的,您还将在JavaDoc中看到一个已弃用类的注释。例如,的注释中说:

不赞成。此类无法将字符正确转换为字节。从JDK1.1开始,从字符串创建流的首选方法是通过StringReader类


正如其他人提到的,不,它不是不推荐的,但我个人总是使用它,因为它提供了更丰富的API和更大的灵活性:

  • ScheduledExecutorService
    允许您指定线程数,而
    Timer
    始终使用单个线程
  • ScheduledExecutorService
    可以构造为允许控制除名称/守护进程状态以外的线程方面(例如优先级、
    ThreadGroup
    UncaughtExceptionHandler
  • ScheduledExecutorService
    允许以固定延迟和固定速率调度任务
  • ScheduledExecutorService
    接受
    Callable
    /
    Runnable
    作为工作单元,这意味着您不需要专门为
    TimerTask
    子类化来使用它;i、 e.您可以将相同的
    Callable
    实现提交给常规
    ExecutorService
    ScheduledExecutorService
JDK的bug追踪器中有一个漏洞,在2016年年中,JDK 9中声明
java.util.Timer
(和
TimerTask
)将被弃用

几个Java SE API将添加@Deprecated注释, 更新或删除。下面列出了这些变化的一些例子

[……]

  • 将@Deprecated添加到
    java.util.Timer
    TimerTask


但是,在JDK 9版本中,这些类没有被弃用(弃用的类可以在中找到)。

谢谢。我也会看看石英。是的,石英非常优秀,尽管API不是很好。不过,Spring附带的石英包装使其更加实用/灵活。谢谢。所以你认为,在实现的重量方面——速度、内存使用、CPU使用——计时器是最轻的选择吗?计时器是“轻量级”的,因为它只有一个后台线程。请注意,计时器和ScheduledExecutorService都在内部使用数组来保存计划任务。因此,调度10000000个任务,然后取消它们将使数组大小保持在10000000。事实上,这很少会成为一个问题。老实说,在大多数情况下,我不知道也不关心性能。如果我有性能问题,那么通过ScheduledThreadPoolExecuter交换Timer.sleep()将是我最后看到的事情之一…抱歉@Andreas\D我通常也不关心性能问题,但我正在使用Timer成功地创建MIDI音符循环器。所以如果每秒有1K个计划任务。。。另一方面,也许我使用计时器已经走上了一个疯狂的方向。谢谢比尔,问题中提到了不推荐使用的列表。我想知道是否有一些内幕消息让人们知道计时器不受欢迎了(或其他什么)。@yar:哦,是的,我没有注意到“这里”这个词被链接了。
Timer
类的JavaDoc本身会有一个注释,让您知道它是否曾经被弃用过。谢谢Bill,我承认在这里链接
这个词并不是锚文本的最佳实践:)@yar:我也犯了同样的错误,所以我不能大声抱怨。:)我们都在
最后一个好处可能会让我感兴趣。但除此之外,我担心ScheduledEx。。。可能“更重”。想法?假设您使用一个线程创建ScheduledExecutorService,您不太可能看到性能上的任何差异(尽管计时器包含自己的优先级队列实现)。
java.util.Date
也不反对,但这非常需要一个替代方案。Observer/Observable也是如此。@skaffman你用什么来代替
java.util.Date
?如果他们不反对这些东西,我怎么知道不使用它们呢?@yar:当你意识到它们是垃圾时,你知道不使用它们。运用你的判断力。实际上,
java.util.Date
的替代品是JodaTime。
java.util.Timer
远不是brill