在Java中打印时,错误输出流与标准输出流并发

时间:2014-10-14 16:30:17

标签: java printing concurrency

执行此代码时,它会生成加扰输出,而System.out.print()System.err.print()之间没有特定顺序。为什么会这样?

for (int i = 0; i < 100; i++) {
    System.out.print(i+" ");
    System.err.print(i+"+");
}

在Java中打印时,为什么标准错误输出流与标准输出流并发?

1 个答案:

答案 0 :(得分:3)

System.outSystem.err是两个不同的流,因此,它们在不同的时间工作。您在此遇到的问题是因为在控制台应用程序中,两个流都被刷新到同一个输出缓冲区,即控制台。每个流都可以在不同的时间刷新,控制台缓冲区会关心你的同步,但这会导致不可预测的结果。

如果您希望/需要为两个流提供单个且更好的托管输出,请使用log4j2或logback等记录器库,这已经解决了这些问题。