Acquires the lock for the specified key.
If the lock is not available then the current thread becomes disabled for thread scheduling purposes and lies dormant until the lock has been acquired.
You get a lock whether the value is present in the map or not. Other threads (possibly on other systems) would block on their invoke of
lock()
until the non-existent key is unlocked. If the lock holder introduces the key to the map, the
put()
operation is not blocked. If a thread not holding a lock on the non-existent key tries to introduce the key while a lock exists on the non-existent key, the
put()
operation blocks until it is unlocked.
Scope of the lock is this map only. Acquired lock is only for the key in this map.
Locks are re-entrant so if the key is locked N times then it should be unlocked N times before another thread can acquire it.
Warning:
This method uses
hashCode and
equals of binary form of the
key, not the actual implementations of
hashCode and
equals defined in
key's class.
@param key key to lock.
@throws NullPointerException if the specified key is null