This is not the first time in this book that we have run into synchronization terminology. We have already used terms such as synchronization, serialization, critical sections, race condition, and locks. We never really explained them, and it is time to step back and clarify the terminology. The first issue is presenting the problem: What is the problem that all that terminology is trying to address?
 It does not help at all that Java has overloaded the term “serialization” to mean something entirely different and unrelated to synchronization.
Take a simple code statement such as
x = x + 1;
If two threads execute this statement, we expect the resulting value stored in x to be x+2. Any other ...