睡到下一秒

时间:2010-08-24 21:46:37

标签: java multithreading sleep

我经常发现需要经常等到下一秒才能完成系列中的下一个操作。这大大减慢了单元测试的速度。所以这是我的问题:

而不是做Thread.sleep(1000)是否有更快捷的睡眠方式,直到第二次更改到下一秒?

说时间是1:00:89

我睡了一秒钟到1:01:89

我希望在时间到达1:01时继续执行 或尽可能接近。

这合理吗? ^ _ ^

2 个答案:

答案 0 :(得分:11)

嗯,你可以这样做:

long millisWithinSecond = System.currentTimeMillis() % 1000;
Thread.sleep(1000 - millisWithinSecond);

这不会是准确的,请注意 - 您可能需要迭代,这有点乱。

然而,最好不要睡觉。你能注入一个“睡眠服务”,让你在测试中假装睡觉吗? (我很少需要这样做,但我经常注入一个假时钟来报告不同的时间。)在生产代码中睡觉的目的是什么?

答案 1 :(得分:1)

当你说“第二个”时,你的意思是系统时钟的第二个吗?您可以通过System.currentTimeMillis()获取当前时间(以毫秒为单位),然后从1000中减去该数据并按该数量休眠,但请记住,Thread.sleep()并不完全准确,所以如果超调则不要感到惊讶一点点。