java - 为什么 System.out.println 出现故障?

标签 java println system.out

我不时想使用 System.out.prinln 来调试东西而不是使用调试器,或者我想要一个简单的程序来写入标准输出,这样我就可以在没有的情况下记录一些东西花时间设置正确的日志记录。我注意到有时我的文本最终会乱序打印。 例如:

System.out.println("A");
System.out.println("B");    
System.out.println("C");

可能会导致

A
C
B

正在打印。

我很确定我没有疯,所以我有两个问题:

  1. 为什么会这样?
  2. 有什么简单的方法可以避免这种情况发生?

编辑:更多信息:

我正在运行使用 JUnit 构建 Lucene 查询的单元测试。为了将它们打印出来,我编写了这个类:

public class LogHelper { //TODO-DAVID remove
    public static final boolean ENABLED = true;
    public static final boolean DISABLED = false;

    private boolean enabled;

    public LogHelper(boolean enabled){
        this.enabled = enabled;
    }

    public synchronized void debug(String someString){
        if(enabled){
            System.out.println(someString);
        }
    }
}

我尝试让'debug()'同步,以防多个线程调用它,但奇怪的打印仍然偶尔会出现乱序。

最佳答案

除非打印发生在不同的线程中,否则这永远不会发生。那么执行顺序可能是不确定的。另一方面,如果您正在写入 System.outSystem.err 并看到困惑的输出,那是因为它们是碰巧写入的两个不同的流默认情况下完全相同的输出,一个或另一个可能首先出现,特别是由于缓冲或其他考虑。

关于java - 为什么 System.out.println 出现故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460987/

相关文章:

java - 新按钮的 XML 代码不起作用

Scala 中的 Java 迭代器

java - 选择打印线上的位置,java字符串

java - 我如何打印这个?

Java 可选参数未按预期工作

java - 以编程方式创建 Spring Framework 任务?

java - 您好,我似乎无法打印使用 DrawingPanel 比较三个圆圈大小的程序的结果

java - System.out.print 同时打印两行/问题。我究竟做错了什么?

android - java.lang.NullPointerException : println needs a message

java - Java 中 printf ("%*s",indent,message) 的替代方法?