gpt4 book ai didi

java - 如果线程实际上 hibernate 时间太长,是否可以跳过后续的 sleep() ?

转载 作者:行者123 更新时间:2023-12-01 07:30:10 24 4
gpt4 key购买 nike

假设我在线程中有一个以下循环(我们将其称为Thread-A)。

while (threadCondition) {
System.out.println(new Date());
Thread.sleep(1000);
}

并假设其他Thread-B将导致应用程序挂起时间> = 2秒(因为其他一些线程(我们称之为Thread-B) >、由于CPU资源不足、可用内存不足等原因)

是否有可能当 Thread-A 在上述提到的 >=2 秒后开始执行时,System.out.println(new Date())将依次执行两次(“立即”,没有 sleep ),并将打印相同的日期(具有相同的毫秒数)两次?

最佳答案

JVM 不保证 sleep 时间的精度。它可能会在 996 毫秒、1003 毫秒或 2000 毫秒后唤醒 - 所有这些都是有效时间

However, these sleep times are not guaranteed to be precise, because they are limited by the facilities provided by the underlying OS. Also, the sleep period can be terminated by interrupts, as we'll see in a later section. In any case, you cannot assume that invoking sleep will suspend the thread for precisely the time period specified -- source

不会跟踪线程真正 hibernate 的时间。

当遇到另一个 sleep() 时,线程将再次等待(或多或少)1000 毫秒,然后再唤醒。

由于 sleep 时间不精确,因此您的应用程序有可能在时间 10.000 打印一次日期,并在 10.981 再次打印相同的日期,尽管几乎一秒过去了。

另外:请记住,sleep() 方法可能会被中断。如果异常处理代码在此循环中,则 sleep 可能会被中断,异常被吞掉并打印两个日期。

关于java - 如果线程实际上 hibernate 时间太长,是否可以跳过后续的 sleep() ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18574221/

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