when a thread enters a synchronized block it will have lock on the object specified. Will it have lock on the this object also??? Means the object used to invoke the method in which the synchronized block is.
Yes, it's true that you will synchronize on the intrinsic lock of the String object associated with the literal.
However, this is a terrible idea, because the String object will be part of the String constant pool.
This means any class that uses the same literal as a synchronization option, will be contending for the same lock.
If you absolutely must use a String object for this purpose, make sure you initialize the String object with the new keyword, instead of directly using a literal, or a String reference initialized with a literal value.
Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.