【发布时间】:2013-02-15 08:07:28
【问题描述】:
请考虑这个java代码:
public class CMain {
public static void main(String[] args){
for (int i = 0; i < 10; i++) {
System.out.println("A");
System.err.println("B");
}
}
}
快速浏览一下代码,我们中的一些人可能会认为输出必须是 As 和 Bs 的输出。但事实并非如此!随机出现10个A字和10个B字。像这样的:
这是为什么呢?以及解决方案是什么,以便交替显示 As 和 Bs ( A B A B A B ...) 在我问这个问题之前,我检查了其他几个类似的问题以寻求解决方案,但不适用于我的案例!我带了一些来这里:
【问题讨论】:
-
这是两个不同的流,碰巧合并到同一个控制台中。如果您希望所有内容都按给定顺序放在一个地方,为什么不使用单个流(out OR err)?
-
我认为答案在您的第二个链接中“问题是终端仿真器(在您的情况下为 Eclipse)负责处理应用程序的标准输出和标准错误。没有与终端仿真器通信时,您永远无法确定 out 和 err 以正确的顺序显示。因此,我会考虑在 err 上打印所有内容并将其重定向到文件。您仍然可以使用 out 进行干净的用户交互。"
-
两个流是同步的,但不是在同一个锁上,所以你应该期待一些交错......但是,每个流都将单独排序。
-
@owlstead 基本上说:设计。 ;-)
标签: java synchronization system.out system.err