System.out 実装には、出力ストリームに同期ブロックが含まれています。
PrintStream.javaから:
/**
* 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();
}
}
Putting System.out.println a lot will make the entire project to run almost single-threaded, because all thread will waiting for synchronization lock, and make your application begin to crawl.
This means your superior is right.
Alternatively, Use logging framework like log4j
instead. You can still configure your log4j to still output to System.out.println by just minor changes in the appender configuration.