执行此代码时,它会生成加扰输出,而System.out.print()
和System.err.print()
之间没有特定顺序。为什么会这样?
for (int i = 0; i < 100; i++) {
System.out.print(i+" ");
System.err.print(i+"+");
}
在Java中打印时,为什么标准错误输出流与标准输出流并发?
答案 0 :(得分:3)
System.out
和System.err
是两个不同的流,因此,它们在不同的时间工作。您在此遇到的问题是因为在控制台应用程序中,两个流都被刷新到同一个输出缓冲区,即控制台。每个流都可以在不同的时间刷新,控制台缓冲区会关心你的同步,但这会导致不可预测的结果。
如果您希望/需要为两个流提供单个且更好的托管输出,请使用log4j2或logback等记录器库,这已经解决了这些问题。