【问题标题】:Distinction between ScheduledExecutorService and rolling your own Runnable with Thread.sleep()ScheduledExecutorService 和使用 Thread.sleep() 滚动您自己的 Runnable 之间的区别
【发布时间】:2011-05-31 06:25:00
【问题描述】:

使用ScheduledExecutorServicescheduleAtFixedRate() 定期运行一段代码而不是创建一个具有永久循环的新Runnable 以及导致线程的Thread.sleep() 有什么好处睡到想要的时间?

其中一种方法是否有性能提升?

【问题讨论】:

    标签: java multithreading scheduled-tasks scheduledexecutorservice


    【解决方案1】:

    使用ScheduledExecutorService 的最大好处是您不需要编写代码,而且它经过了很好的测试。它还支持开箱即用地取消任务,您可以安排多个任务。

    另一个好处是其他开发人员知道ScheduledExecutorService 做了什么,他们可以阅读 javadoc,他们可以在公共论坛上提出问题并获得帮助,而对于自定义代码则更难获得帮助。

    ScheduledExecutorService 的 javadoc 也有一个很好的例子,说明如何创建一个每 10 秒执行一个小时,然后被取消的任务。

    【讨论】:

    • 注意@dlev 的警告:由于任务持续时间过长和/或线程不足,不能保证任务以精确的时间间隔运行
    • 您可能还希望库类能够处理时钟时间更改时应该发生的复杂情况。它是否真的是另一回事;-)
    • 没错,但我们可能不得不忍受这个缺陷很多年:(
    猜你喜欢
    • 1970-01-01
    • 2016-08-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-06
    • 2021-03-08
    • 1970-01-01
    • 2011-10-05
    • 2015-01-05
    相关资源
    最近更新 更多