Understanding Thread Synchronization In Java Why Some Expressions Yield Different Results