当PC进入休眠模式时,Java如何计算睡眠时间?
我编写了一个Java程序,该程序执行一些函数,预计将睡眠12小时(通过当PC进入休眠模式时,Java如何计算睡眠时间?,java,jvm,sleep,sleep-mode,Java,Jvm,Sleep,Sleep Mode,我编写了一个Java程序,该程序执行一些函数,预计将睡眠12小时(通过TimeUnit.hours.sleep(12)),然后继续执行另一个函数 我错误地让我的笔记本电脑在一夜之间没有连接到电源,我的笔记本电脑进入了休眠模式。今天早上我把电脑从休眠模式唤醒,我的程序和以前一样在运行 但是,从调用初始的TimeUnit.hours.sleep(12)到代码(即第二个函数)没有执行,现在已经超过12个小时了 这是否意味着我现在必须再等12个小时(从我醒来时开始),它才能执行我想要的代码?(我现在不能
TimeUnit.hours.sleep(12)
),然后继续执行另一个函数
我错误地让我的笔记本电脑在一夜之间没有连接到电源,我的笔记本电脑进入了休眠模式。今天早上我把电脑从休眠模式唤醒,我的程序和以前一样在运行
但是,从调用初始的TimeUnit.hours.sleep(12)
到代码(即第二个函数)没有执行,现在已经超过12个小时了
这是否意味着我现在必须再等12个小时(从我醒来时开始),它才能执行我想要的代码?(我现在不能停止我的程序来测试这一点,因为我保证我的函数即使在额外的12小时后也不会执行,因为它依赖于依赖于实时数据的第一个函数的输出)
我在上发现了一个类似的线程,与C相关,但与Java无关
基于一个线程,我读的程序在确定睡眠时间时比较了两个时间戳,但肯定不能这样,否则我的代码就已经执行了。那么thread.sleep()
在引擎盖下是如何工作的呢
感谢线程。睡眠的实现显然依赖于平台 HotSpot JVM在Windows上调用,在所有POSIX操作系统上使用
CLOCK_monotic
。当系统挂起时,Windows和Linux API都不会占用时间
基本上,
Thread.sleep
从来都不是为在休眠期间工作而设计的。有关更多信息,请参阅和的讨论。理论上,休眠会冻结磁盘、内存和处理器的状态,并安全地保存它们。也就是说,一旦你从休眠状态返回后打开笔记本电脑,它就会恢复到你关闭它的状态。在此期间,后台没有进程或线程运行。我会尝试反复睡眠1分钟(或更少),直到挂钟上的时间到达+1我刚刚在Windows 10上用Java 1.8.0202尝试了这一点,实际上,睡眠目标时间错过的时间与休眠PC、等待一段时间并解除其纤化所花费的时间差不多。