如果操作系统被挂起,那么正在休眠的线程会发生什么?

时间:2018-06-03 19:40:53

标签: java multithreading

如果我开始一个帖子:

 new Thread(() -> {
        while (running) {
            try {
                Thread.sleep(TimeUnit.MINUTES.toMillis(30));
                /* ... */
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
 }).start();

如果操作系统被挂起,线程会发生什么(睡眠模式,无论如何) Thread.sleep()是否处于活动状态?操作系统退出睡眠时线程是否恢复正常睡眠?

我使用的是Windows 10。

2 个答案:

答案 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秒开始继续。