gpt4 book ai didi

java - Intellij Idea 控制台延迟

转载 作者:行者123 更新时间:2023-12-02 02:30:01 34 4
gpt4 key购买 nike

我有以下代码。主线程启动另一个线程。 7 秒后主线程中断另一个线程。

package com.company;

public class Main {

public static void main(String[] args) {

Thread t = new Thread(new Runnable() {
@Override
public void run() {
for ( int i = 0; i < 10; i++ )
{
System.out.println("Sleeping #" + i);
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
System.out.println("Interrupted");
e.printStackTrace();
continue;
}
}
}
});
t.start();
try {
Thread.sleep(7000);
t.interrupt();
} catch (InterruptedException e) {}
}
}

我期望得到这样的输出:

Sleeping #0
Sleeping #1
Interrupted
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at com.company.Main$1.run(Main.java:16)
at java.lang.Thread.run(Thread.java:748)
Sleeping #2
Sleeping #3
... and so on

但是我得到的是:

Sleeping #0
Sleeping #1
Interrupted
Sleeping #2
java.lang.InterruptedException: sleep interrupted
at java.lang.Thread.sleep(Native Method)
at com.company.Main$1.run(Main.java:16)
at java.lang.Thread.run(Thread.java:748)
Sleeping #3
... and so on

它首先打印“Interrupted”。然后是下一次迭代的输出“Sleeping #2”,然后打印堆栈跟踪。为什么会发生这种情况?打印堆栈跟踪似乎存在延迟。是 IntelliJ Idea 控制台相关的问题吗?因为当我在 native 控制台中运行该程序时,它运行良好。

最佳答案

System.out.println 输出到 stdout,而 Throwable.printStackTrace 输出到 stderr。终端实现可以独立地缓冲每个流,并且每个流的输出交错的方式没有明确定义。

如果要确保给定线程的输出严格按顺序显示,请将所有输出定向到同一流。在您的情况下,您可以更改 printlns 以使用 System.err 或使用 Throwable.printStackTrace(System.out)

关于java - Intellij Idea 控制台延迟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47253760/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com