为了账号安全,请及时绑定邮箱和手机立即绑定

Java计时器与ExecutorService?

Java计时器与ExecutorService?

倚天杖 2019-06-12 21:20:11
Java计时器与ExecutorService?我有一些代码,在这些代码中,我使用java.util.timer..我环顾四周,发现ExecutorService也能做到。所以这个问题,你用计时器和ExecutorService要安排任务,一个人比另一个人有什么好处?还想检查是否有人使用过Timer类中遇到的任何问题。ExecutorService为他们解决了。
查看完整描述

3 回答

?
ITMISS

TA贡献1871条经验 获得超8个赞

根据Java并发在实践中的应用:

  • Timer

    对系统时钟的变化很敏感,

    ScheduledThreadPoolExecutor

    不是。
  • Timer

    只有一个执行线程,所以长时间运行的任务会延迟其他任务.

    ScheduledThreadPoolExecutor

    可以配置任意数量的线程。此外,如果需要,您可以完全控制创建的线程(通过提供

    ThreadFactory).

  • 抛出运行时异常

    TimerTask

    切断一条线,从而使

    Timer

    死了:-(.也就是说,计划的任务将不再运行。

    ScheduledThreadExecutor

    不仅捕获运行时异常,而且它允许您在需要时(通过重写)处理它们。

    afterExecute

    ThreadPoolExecutor

    )。抛出异常的任务将被取消,但其他任务将继续运行。

如果你能用ScheduledThreadExecutor而不是Timer,这样做。

还有一件事.。当ScheduledThreadExecutor在Java1.4库中不可用,有一个JSR 166的后端(java.util.concurrent)到Java 1.2、1.3、1.4,它具有ScheduledThreadExecutor班级,等级。


查看完整回答
反对 回复 2019-06-12
?
慕容森

TA贡献1853条经验 获得超18个赞

如果你可以得到,那就很难想出原因使用Java 5执行器框架。呼叫:

ScheduledExecutorService ex = Executors.newSingleThreadScheduledExecutor();

会给你一个ScheduledExecutorService具有类似的功能Timer(也就是说,它将是单线程的),但其访问可能稍微更具可伸缩性(在遮罩下,它使用并发结构,而不是像使用Timer(全班)。使用ScheduledExecutorService还提供了一些优势,例如:

  • 如果需要,可以自定义它(请参阅

    newScheduledThreadPoolExecutor()

    或者

    ScheduledThreadPoolExecutor

    (班级)
  • “一次性”执行可以返回结果

关于坚持的唯一原因Timer我能想到的是:

  • 它是可用的预Java 5
  • J2ME中提供了类似的类,这可以使您的应用程序更容易移植(但在本例中添加公共抽象层并不是非常困难)。


查看完整回答
反对 回复 2019-06-12
?
函数式编程

TA贡献1807条经验 获得超9个赞

ExecutorService更新,更通用。计时器只是一个线程,它定期运行您为其计划的内容。

ExecutorService可能是一个线程池,甚至可以分布在集群中的其他系统上,执行诸如一次性批处理执行等.

只要看看每个人提出的决定就行了。


查看完整回答
反对 回复 2019-06-12
  • 3 回答
  • 0 关注
  • 478 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号