System.out
返回“标准”输出流 - PrintStream
。 PrintStream
的 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();
}
}
从未创建'混合'输出。
所以我的问题:
答案 0 :(得分:6)
由于PrintStream
,其超类FilterStream
和其超类OutputStream
的文档都没有说明线程安全或同步,理论上你不能依赖它,它不是合同的一部分。
我认为如果有人制作了一个PrintStream
课程而不是甲骨文在这方面做了什么,那将是令人惊讶的,但我之前一直感到惊讶。