我做了一个小实验,尝试将sysout和syserr的打印顺序排列到控制台,因为它有时会混合。我试过这个:
System.out.println("output");
Thread.sleep(100); //Wait before printing the error to insure the sysout comes first.
System.err.println("Error");
它工作正常。但我在这里读到有关sysout和syserr打印失序的问题,这是不建议的。我只是想知道是使用thread.sleep();在这样的情况下糟糕?我正在使用eclipse,在我的项目中,我将thread.sleep放在代码中的每个syserr之前。
答案 0 :(得分:2)
执行flush()
而不是sleep()
。
System.out.println("whatever");
System.out.flush();
...
(为回应OP的评论而添加)
在单线程中,不能进行交叉混合打印。
必须是其他五个地方的其他线程之一同时打印。你需要同步一些东西。例如,写一点实用方法
public static void printToOutAndErr(String toOut, String toErr) {
synchronized(System.out) {
System.out.println(toOut);
System.err.println(toErr);
}
}
让他们所有使用它。
然而,让我强烈强烈建议您要查看日志框架。它们涵盖了所有这些内容。
答案 1 :(得分:0)
由于您似乎没有使用多个线程,因此应该可以正常工作。 Concurrency复习可能会有所帮助。