There is no difference, until you call single println command. One println is internally synchronized. But if your out contains multiple print statements, there may be such situation, illistrated below
out(int threadId){
println("line 1 T$threadId")
println("line 2 T$threadId")
}
Execution may flow like
//output by 2 threads
line 1 T1 // thread 1 entered out
// thread 1 was interrupted
// thread 2 entered out
line 1 T2
line 2 T2 //end of thread 2 out
// Thread 1 resumed
line 2 T1
As we see, output is messed. synchronized fixes that problem
See also SO answer about println inner synchronisation
https://stackoverflow.com/a/9459886/1601606