System.out
возвращает «стандартный» выходной поток - a PrintStream
. Javadoc из PrintStream
ничего мне не говорит о безопасности потока, но, глядя на источник OpenJDK и OracleJDK говорит мне, что println
синхронизируется.По умолчанию это System.out.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();
}
}
Это подходит очень хорошо для моего опыта: Вызов System.out.println()
никогда не создавали «смешанные» выхода при вызове из разных потоков.
Так что мой вопрос (ы):
- Могу ли я рассчитывать на такое поведение (с использованием различных JVMs)?
- Есть ли какая-то документация, которую я пропустил, которая описывает это поведение?
см. Также: http://stackoverflow.com/questions/9459657/synchronization-and-system-out-println – slipperyseal