我编写了一个Java程序,该程序执行某些功能,并有望睡眠12个小时(通过TimeUnit.HOURS.sleep(12)
),然后继续执行另一个功能。
我错误地将笔记本电脑留在通宵状态,而没有连接电源,笔记本电脑进入了休眠模式。今天早上,我从休眠模式唤醒了计算机,并且程序像以前一样运行。
但是,现在距离调用初始TimeUnit.HOURS.sleep(12)
且代码(即第二个函数)未执行已经超过12个小时。
这是否意味着我现在必须再等待12个小时(从唤醒笔记本电脑时开始),然后它才能执行所需的代码? (我现在无法停止程序进行测试,因为我保证我的函数即使再过12小时也不会执行,因为它依赖于依赖实时数据的第一个函数的输出)
我在SO上找到了与C相关的类似线程,但与Java无关。
基于一个线程,我读取的程序在确定睡眠时间时会比较两个时间戳,但是肯定不是这种情况,否则我的代码已经执行了。那么thread.sleep()
是如何运作的呢?
谢谢
答案 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-8146730和JDK-8146527的讨论。