您的位置:首页 > 其它

System.out和System.err的并发

2016-04-10 12:03 141 查看


System.out和System.err的并发

最近在开发时发现,同时使用System.out和System.err打印内容,会出现多线程的现象。


代码如下:

public class SystemDemo {

public static void main(String[] args) {

for (int i = 0; i < 5; i++) {
System.out.println("+++++");
// System.out.flush();
System.err.println("-----");
}
}
}


运行结果类似于:



查阅资料的解释是:

标准输出和标准出错的一个区别是,标准输出往往是带缓存的,而标准出错没有缓存。 但是我们通过添加
System.out.flush
发现,现象依然存在。 -->
所以不是缓存的原因

另一个解释是,They
are different OutputStreams. 建议的方法:

System.setErr(System.out);


或者

System.setOut(System.err);


发现的确是可以的:

private static void test02() {
System.setErr(System.out);
// System.setOut(System.err);
for (int i = 0; i < 5; i++) {
System.out.println("+++++");
System.err.println("-----");
}
}


运行结果:




总结:

System.out和System.err使用不同的printstream对象,所以线程不同步。同时使用进行打印,会出现打印内容交叉的结果。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: