以固定速率执行线程逻辑的正确方法

时间:2014-12-03 02:54:04

标签: java

以固定速率调用线程的run()方法的正确方法是什么?

我应该实施Runnable并使用Thread#sleep()与基于System#nanoTime()的数学并行,还是应该延伸Thread并使用ScheduledExecutorService

我希望无论处理时间如何,每个#ms都要执行这个逻辑,例如:

Loop takes 32ms
Thread waits 228ms (250-32) then executes loop again.
Loop takes 17ms
Thread waits 233ms (250-17) then executes loop again.

这意味着仅使用Thread#sleep()本身就不是一个合适的解决方案,我知道通过使用start / end / elapsed来计算sleep()的毫秒数,我可以非常接近这个效果变量并使用nanoTime()作为参考,但这是"正确"这样做的方法?

0 个答案:

没有答案