作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
给定一个时钟、一个即时和当前线程,Java 库中是否已经有一些(实用)方法可以使当前线程 hibernate 直到给定时钟到达即时?
有点像
public static void sleepUntil(Instant instant, Clock clock)
throws InterruptedException;
?
我在使用自定义减速时钟的测试设置中需要这个。
我知道它很容易实现,但我更喜欢一个标准的解决方案(如果有的话)(但目前还没有找到)。
最佳答案
首先,Clock
是一个非常简单类,几乎没有 implementation和 few uses in the standard API . SystemClock
、OffsetClock
和 TickClock
是同一文件中的示例。所以答案似乎是不,它不在default API中。 .
如果您获得了“减速时钟”并且可能无法修改它以添加所需的sleepUntil()
-代码,并且它被减慢了固定数量,你可以做类似的事情
public static void sleepUntil(Instant instant, Clock clock)
throws InterruptedException {
Instant now = Instant.now(clock);
long duration = now.until(instant, ChronoUnit.MILLIS);
long testSleep
= ( duration < 10000 )? (duration / 10) : 1000;
long start = clock.millis();
Thread.sleep(testSleep);
long stop = clock.millis();
double clockskew = (stop - start) / testSleep;
now = Instant.now(clock);
Thread.sleep(now.until(instant, ChronoUnit.MILLIS) * clockskew);
}
这首先进行测试运行以确定时钟偏移,然后 hibernate 调整后的持续时间。
(也许您需要调整 sleep
中的瞬间以适应其他时钟。如果您希望对其进行测试/调整,请发布您的时钟代码。)
关于java - Java 8 中是否有一种方法可以让线程 hibernate 直到使用特定时钟的 Instant?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32870369/
我是一名优秀的程序员,十分优秀!