System.out.println默认是线程安全的吗?

时间:2015-10-01 06:12:57

标签: java multithreading openjdk

System.out返回“标准”输出流 - PrintStreamPrintStream javadoc 告诉我关于线程安全的一切,但是查看 OpenJDK 的来源和 OracleJDK 告诉我{ {1}}已同步。

println

这非常适合我的经验:当从不同的线程调用时,调用/** * Prints a String and then terminate the line. This method behaves as * though it invokes <code>{@link #print(String)}</code> and then * <code>{@link #println()}</code>. * * @param x The <code>String</code> to be printed. */ public void println(String x) { synchronized (this) { print(x); newLine(); } } 从未创建'混合'输出。

所以我的问题:

  1. 我可以依赖此行为(使用不同的 JVM )吗?
  2. 是否有一些我遗漏的文档描述了这种行为?

1 个答案:

答案 0 :(得分:6)

由于PrintStream,其超类FilterStream超类OutputStream的文档都没有说明线程安全或同步,理论上你不能依赖它,它不是合同的一部分。

我认为如果有人制作了一个PrintStream课程而不是甲骨文在这方面做了什么,那将是令人惊讶的,但我之前一直感到惊讶。