Java 在 win10 中显示关闭时线程似乎暂停

Java Thread seems to be paused when the display turns off in win10

例如:

重现步骤:

  1. (windows10) 将关闭显示时间更改为 1 分钟

  2. 运行下面的代码。 (这需要包裹在 Java class 中。)

    Thread t = new Thread(() -> {
        while (true) {
            System.out.println(LocalDateTime.now().format(
                               DateTimeFormatter.ISO_DATE_TIME));
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
             e.printStackTrace();
            }
        }
    });
    t.start();
    
  3. 等几分钟

  4. 唤醒屏幕

输出

2021-02-27T14:13:56.58
2021-02-27T14:14:06.59
2021-02-27T14:14:16.59
2021-02-27T14:14:26.59
2021-02-27T14:14:36.59
2021-02-27T14:14:46.591
**2021-02-27T14:14:56.592
2021-02-27T14:15:58.345**
2021-02-27T14:16:08.346

有什么方法可以在显示器电源关闭时保持线程 运行 吗?

我认为您误解了输出。线程没有被“暂停”。

我的读数是 println 调用在显示关闭时 阻塞 。由于它正在阻塞,下一个 sleep 调用将被延迟。

无法从 Java 中解决此问题(即更改写入标准输出的行为)。阻塞发生在系统调用级别,由主机操作系统完成。


如果你想防止应用程序像这样阻塞,如果它们连接到 可能 阻塞的“接收器”,请不要直接写入标准输出/标准错误.如果您写入本地文件系统中的文件,则几乎可以保证不会阻塞。在某些情况下,其他任何东西都可能会阻止……。因此,如果线程不阻塞是绝对要求,请注意它写入的内容。