我不时想使用 System.out.prinln
来调试东西而不是使用调试器,或者我想要一个简单的程序来写入标准输出,这样我就可以在没有的情况下记录一些东西花时间设置正确的日志记录。我注意到有时我的文本最终会乱序打印。
例如:
System.out.println("A");
System.out.println("B");
System.out.println("C");
可能会导致
A
C
B
正在打印。
我很确定我没有疯,所以我有两个问题:
- 为什么会这样?
- 有什么简单的方法可以避免这种情况发生?
编辑:更多信息:
我正在运行使用 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.out
和 System.err
并看到困惑的输出,那是因为它们是碰巧写入的两个不同的流默认情况下完全相同的输出,一个或另一个可能首先出现,特别是由于缓冲或其他考虑。
关于java - 为什么 System.out.println 出现故障?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460987/