有谁能告诉我为什么在运行这个循环后我总是有这个奇怪的输出?这是一个线程问题还是什么?
for(int i=0;i<10;i++){
System.out.println("out: "+i);
System.err.println("err: "+(i+1));
}
- &GT;输出:
err: 1
out: 0
err: 2
err: 3
err: 4
out: 1
out: 2
out: 3
out: 4
err: 5
out: 5
err: 6
out: 6
err: 7
err: 8
out: 7
out: 8
err: 9
out: 9
err: 10
out: 10
答案 0 :(得分:11)
您的终端正在运行您的应用程序并且有两个连接到它的文件描述符,一个用于stdout,另一个用于stderr。然后它必须读取您的应用程序在这些文件描述符上输出的数据并在屏幕上呈现它。无法保证终端应用程序(或操作系统)如何实现此交互。想象一下,终端实际上有两个并行读取stdout和stderr的线程。这两个线程从fds获取数据并进入屏幕的顺序不保证与应用输出时的顺序相同。
答案 1 :(得分:3)
标准输出和标准错误具有单独的缓冲区。交错是正常的。在每次打印调用后尝试flushing输出流。