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

标签 java java-8 java-time

给定一个时钟、一个即时和当前线程,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/

相关文章:

对象上带有收集器的 Java 8 GroupingBy

对具有泛型参数的方法的 Java 方法引用

java - 使用方法引用时参数不匹配

java - 根据年份和年份中的星期获取 LocalDateTime

java - 如何使用 JsonFormat 注释或任何其他 Spring 日期注释验证即时类型字段的 ISO 标准格式的日期值?

java - 带 ZoneOffset 的时间戳格式

java - 奇怪的 ArrayIndexOutOfBoundsException

Java 可运行问题

java - OpenCV物体检测轮廓位置

java - Java 中的意外编译错误