A private mutex (or private lock object) is often used to gain fine-grained control over synchronization without exposing the locking mechanism to the outside world.
Here are the key reasons you might want to use a private mutex instead of synchronized(this)
or synchronized(SomeClass.class)
: