Java 睡到下一秒

Java 睡到下一秒,java,multithreading,sleep,Java,Multithreading,Sleep,我发现经常需要等到下一秒再做一系列的下一个操作。这大大降低了单元测试的速度。所以我的问题是: 有没有一种更快更有效的方法可以让你一直睡到下一秒 假设时间是1:00:89 我睡一秒钟到1:01:89 我宁愿在时间到达1:01时继续执行 或者尽可能接近 这是否合理可行^_^ 嗯,你可以这样做: long millisWithinSecond = System.currentTimeMillis() % 1000; Thread.sleep(1000 - millisWithinSecond); 请

我发现经常需要等到下一秒再做一系列的下一个操作。这大大降低了单元测试的速度。所以我的问题是:

有没有一种更快更有效的方法可以让你一直睡到下一秒

假设时间是1:00:89

我睡一秒钟到1:01:89

我宁愿在时间到达1:01时继续执行 或者尽可能接近


这是否合理可行^_^

嗯,你可以这样做:

long millisWithinSecond = System.currentTimeMillis() % 1000;
Thread.sleep(1000 - millisWithinSecond);
请注意,这并不准确-您可能需要迭代,这有点混乱


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

当你说“秒”时,你是指系统时钟的秒吗?您可以通过
System.currentTimeMillis()
获得当前时间(毫秒),然后从1000中减去该时间,然后再按该时间量休眠,但请记住线程.sleep()并不完全准确,因此如果超出一点,请不要感到惊讶。

+1请注意,在单元测试/生产中不应该休眠code@Tim本德,我认为情况恰恰相反——线程可能会在任何时候被唤醒,在睡眠时间结束之前很久。@Jon Skeet,我使用的web服务每秒最多只能调用一次。如果经常调用,我会被阻塞。@Amigable:好的,所以注入睡眠服务可能比直接调用Thread.sleep要好。@Amigable,你说得对。我想我是从另一篇文章中读到的。下面是一个SDN错误,它描述了为什么无法做出“至少”保证: