saw more, and used more
here just for record .
The Java programming language provides two basic synchronization idioms: synchronized methods and synchronized statements
Synchronization is built around an internal entity known as the intrinsic lock or monitor lock.
Every object has an intrinsic lock associated with it.
1.When a thread invokes a synchronized method, it automatically acquires the intrinsic lock for that method's object and releases it when the method returns.
2.Unlike synchronized methods, synchronized statements must specify the object that provides the intrinsic lock
3. But a thread can acquire a lock that it already owns. Without reentrant synchronization, synchronized code would have to take many additional precautions to avoid having a thread cause itself to block.