gpt4 book ai didi

java - Java 8 中是否有一种方法可以让线程 hibernate 直到使用特定时钟的 Instant?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:26:07 25 4
gpt4 key购买 nike

给定一个时钟、一个即时和当前线程,Java 库中是否已经有一些(实用)方法可以使当前线程 hibernate 直到给定时钟到达即时?

有点像

public static void sleepUntil(Instant instant, Clock clock) 
throws InterruptedException;

?

我在使用自定义减速时钟的测试设置中需要这个。

我知道它很容易实现,但我更喜欢一个标准的解决方案(如果有的话)(但目前还没有找到)。

最佳答案

首先,Clock是一个非常简单类,几乎没有 implementationfew uses in the standard API . SystemClockOffsetClockTickClock 是同一文件中的示例。所以答案似乎是不,它不在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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com