...
However, synchronization is a more secure alternative in situations where the volatile
keyword or an java.util.concurrent.atomic.Atomic*
field is inappropriate, such as if a variable's new value depends on its old value. Refer to CON01-J. Ensure that compound operations on shared variables are atomic for more information.
Exceptions
EX1: An array of class objects Objects of type Class
need not be made visible because class objects they are created by the Virtual Machine and their initialization always precedes any subsequent use. JMM Mailing List
...