PC进入休眠模式时,Java如何计算睡眠时间?

时间:2018-10-18 14:39:52

标签: java jvm sleep sleep-mode

我编写了一个Java程序,该程序执行某些功能,并有望睡眠12个小时(通过TimeUnit.HOURS.sleep(12)),然后继续执行另一个功能。

我错误地将笔记本电脑留在通宵状态,而没有连接电源,笔记本电脑进入了休眠模式。今天早上,我从休眠模式唤醒了计算机,并且程序像以前一样运行。

但是,现在距离调用初始TimeUnit.HOURS.sleep(12)且代码(即第二个函数)未执行已经超过12个小时。

这是否意味着我现在必须再等待12个小时(从唤醒笔记本电脑时开始),然后它才能执行所需的代码? (我现在无法停止程序进行测试,因为我保证我的函数即使再过12小时也不会执行,因为它依赖于依赖实时数据的第一个函数的输出)

我在SO上找到了与C相关的类似线程,但与Java无关。

基于一个线程,我读取的程序在确定睡眠时间时会比较两个时间戳,但是肯定不是这种情况,否则我的代码已经执行了。那么thread.sleep()是如何运作的呢?

谢谢

1 个答案:

答案 0 :(得分:3)

function jsonCall($jsonurl){ // this is one line code. no difference from 3 lines below-> $jsonCalled = json_decode(file_get_contents($homepage . 'views/partials/' . $jsonurl . '.json')); $url = $homepage . 'views/partials/' . $jsonurl . '.json'; $data = file_get_contents($url); // put the contents of the file into a variable $jsonCalled = json_decode($data); // decode the JSON feed // echo $jsonCalled; return $jsonCalled; // <- this should work }; 的实现显然取决于平台。

HotSpot JVM在Windows上调用WaitForMultipleObjects,在所有POSIX操作系统上使用Thread.sleep调用pthread_cond_timedwait。 Windows和Linux API都不考虑系统挂起的时间。

基本上CLOCK_MONOTONIC从未设计为可跨休眠模式工作。有关更多信息,请参见JDK-8146730JDK-8146527的讨论。