Пока вы не измените OutputStream
через System.setOut
, это потокобезопасно.
Несмотря на то, что это потокобезопасный, вы можете иметь много потоков, записывающих в System.out
, например,
Thread-1
System.out.println("A");
System.out.println("B");
System.out.println("C");
Thread-2
System.out.println("1");
System.out.println("2");
System.out.println("3");
умеет читать
1
2
A
3
B
C
среди других комбинаций.
Итак, чтобы ответить на ваш вопрос:
Когда вы пишете в System.out
- он получает блокировку для экземпляра OutputStream
- он затем записывает в буфер и сразу сбрасывается.
Как только он снимает блокировку, OutputStream
сбрасывается и записывается. Не было бы случая, чтобы к вам присоединялись разные строки, например 1A 2B
.
Изменить, чтобы ответить на ваши изменения:
Этого не случилось бы с System.out.println
. Поскольку PrintStream
синхронизирует всю функцию, он заполнит буфер и затем очистит его атомарно. Теперь у любого нового потока будет новый буфер для работы.