This question already has answers here:
Java: System.out.println and System.err.println out of order
                                
                                    (7个答案)
                                
                        
                                4年前关闭。
            
                    
在程序的开始,我打印出这两行:


  Dyvil 1.0.0的Dyvil编译器1.0.0
  
  从“ config.txt”加载配置文件


第一个打印在System.err中,第二个打印在System.out中。这两个println调用均按上述顺序在main方法中发生。但是,似乎有时交换了消息:


  从“ config.txt”加载配置文件
  
  Dyvil 1.0.0的Dyvil编译器1.0.0


在Eclipse调试模式下或从Gradle构建脚本运行程序时会发生这种情况(我尚未使用java命令对其进行测试)。注意,绝对不涉及多线程,所以不要告诉我精神错乱的定义。

这里发生了什么?

最佳答案

这两个流恰恰是两个不同的流。结果,如果最终将它们合并到某种形式的控制台输出中,那么行出现乱序是完全可行的。

System.outSystem.err都是PrintStream,因此几乎可以缓冲,因此仅取决于它们何时刷新。

关于java - System.out和.err-回到 future ? ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/31519672/

10-16 13:07