我经常发现需要经常等到下一秒才能完成系列中的下一个操作。这大大减慢了单元测试的速度。所以这是我的问题:
而不是做Thread.sleep(1000)是否有更快捷的睡眠方式,直到第二次更改到下一秒?
说时间是1:00:89
我睡了一秒钟到1:01:89
我希望在时间到达1:01时继续执行 或尽可能接近。
这合理吗? ^ _ ^
答案 0 :(得分:11)
嗯,你可以这样做:
long millisWithinSecond = System.currentTimeMillis() % 1000;
Thread.sleep(1000 - millisWithinSecond);
这不会是准确的,请注意 - 您可能需要迭代,这有点乱。
然而,最好不要睡觉。你能注入一个“睡眠服务”,让你在测试中假装睡觉吗? (我很少需要这样做,但我经常注入一个假时钟来报告不同的时间。)在生产代码中睡觉的目的是什么?
答案 1 :(得分:1)
当你说“第二个”时,你的意思是系统时钟的第二个吗?您可以通过System.currentTimeMillis()
获取当前时间(以毫秒为单位),然后从1000中减去该数据并按该数量休眠,但请记住,Thread.sleep()并不完全准确,所以如果超调则不要感到惊讶一点点。