使用Thread.sleep();在sysout和syserr中

时间:2013-12-08 02:34:11

标签: java

我做了一个小实验,尝试将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之前。

2 个答案:

答案 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复习可能会有所帮助。

相关问题