如果我开始一个帖子:
new Thread(() -> {
while (running) {
try {
Thread.sleep(TimeUnit.MINUTES.toMillis(30));
/* ... */
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}).start();
如果操作系统被挂起,线程会发生什么(睡眠模式,无论如何) Thread.sleep()是否处于活动状态?操作系统退出睡眠时线程是否恢复正常睡眠?
我使用的是Windows 10。
答案 0 :(得分:4)
在这种情况下,当系统进入睡眠模式时,您的线程也会进入睡眠模式。当然,正在睡觉的电脑具有比你发布的线程更高的订单权限。这种睡眠与您发射的睡眠不同。简而言之,操作系统会创建正在运行的进程的快照,并在唤醒时恢复它。
当PC睡觉时,它几乎冻结了所有东西,你的线程也是如此。如果它在睡眠5分钟时停止,它会在醒来时从那里继续(即使睡眠持续时间更长)。
回想一下特定线程的睡眠,在你的情况下是30分钟,在特定应用程序的上下文中是有意义的。这意味着应用程序的其他部分正在计算您的线程将在30分钟内休眠的事实。如果不是这样,那就是如果你的线程继续30分钟的睡眠,即使PC处于睡眠模式,这意味着你的进程必须仍在继续,这与{{1的目的相矛盾}}
答案 1 :(得分:0)
当Windows在Windows中进入睡眠模式时;系统快照,表示保存所有程序的状态。在这个例子中,我们假设Windows在调用Thread.sleep 5秒后进入休眠模式。 Thread.sleep是第6秒。 1小时后,Windows再次打开,并从之前的快照恢复。这意味着Thread.sleep从第6秒开始继续。