代码之家  ›  专栏  ›  技术社区  ›  Dan Rosenstark

java.util.timer:是否已弃用?

  •  17
  • Dan Rosenstark  · 技术社区  · 15 年前

    我在评论中读到 this answer 在其他许多关于日程安排的问题中(抱歉,没有参考资料) java.util.Timer 被贬低。我真的不希望这样,因为我把它当作在Java中安排事情的轻巧方式(而且它工作得很好)。但如果不赞成,我会找别的地方。 但是,快速查看 API docs for 1.6 没有提到它被否决。 太阳报甚至没有提到 Deprecated List .

    它被正式否决了吗 * 如果是这样,我应该用什么来代替呢?


    * 另一方面, 如果不反对, 人们能不能停止说这种天真而巧妙地实施的set-o类?

    6 回复  |  直到 8 年前
        1
  •  4
  •   Martin    8 年前

    [JDK-8154799] deprecate Timer and TimerTask 在jdk_的bug跟踪器和2016年年中 JEP 277 声明 java.util.Timer (和 TimerTask )将在JDK 9中被弃用。

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

    [艾斯]

    • 添加@deprecated to JavaU.TimeTime: 定时器任务

    但是,在JDK9版本中,这些类并不被弃用(弃用的类可以在 Deprecated List )

        2
  •  15
  •   Adamski    15 年前

    正如其他人提到的,不,它不是不赞成,但我个人总是使用 ScheduledExecutorService 相反,它提供了更丰富的API和更多的灵活性:

    • 计划执行或服务 允许您指定线程数,而 Timer 始终使用单个线程。
    • 计划执行或服务 可以用 ThreadFactory 允许控制除名称/守护进程状态以外的线程方面(例如优先级, ThreadGroup , UncaughtExceptionHandler )
    • 计划执行或服务 允许以固定的延迟和固定的速率安排任务。
    • 计划执行或服务 接受 Callable / Runnable 因为它是工作单元,意味着您不需要子类化 TimerTask 特别是使用它;也就是说,您可以提交相同的 可赎回的 执行到常规 ExecutorService 或A 计划执行或服务 .
        3
  •  7
  •   Simon Forsberg Kyle Rosendo    9 年前

    我认为这是一个误会。计时器类的javadoc提到 ScheduledThreadPoolExecutor 注意,这门课 有效的多功能替代品 用于计时器/计时器任务组合。没有别的了。计时器未被弃用。

    另一个来自javadoc的引用,这次scheduledthreadpoolExecutor:

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

        4
  •  6
  •   Brian Agnew    15 年前

    不,不是全部。您可能需要使用其他机制,如 Quartz 对于更复杂的计时器要求,但计时器工作得很好,而且不会去任何地方。

        5
  •  4
  •   Bill the Lizard    15 年前

    不,不反对。除了太阳的 Deprecated List 在JavaDoc中,您还将看到一个注释,说明一个已被弃用的类。例如,注释 StringBufferInputStream 说:

    已弃用。此类没有正确地将字符转换为字节。从JDK1.1开始,从字符串创建流的首选方法是通过StringReader类。

        6
  •  2
  •   stacker    15 年前

    在JDK1.6 U10中,它没有被否决,因此不需要替代。