Это вызвано условием гонки .
System.out.format(...);
намного медленнее, чем System.out.println(...)
.
При println()
, строка для печати создается вызывающей стороной, поэтому все, что нужно сделать println()
, это напечатать эту строку.
При format()
(или printf()
) строка для печати строится внутри метода, тогда как метод имеет синхронизированный замок. Кроме того, метод должен анализировать строку формата, сложность которой отсутствует с println()
, где это простая конкатенация строк.
Так, с format()
код достаточно медленный, чтобы 2 потока могли введите методы одновременно.
При println
код выполняется быстрее, поэтому вероятность одновременного входа обоих методов в методы намного меньше.