Yes, ConcurrentHashMap
uses a multitude of locks (by default, 16 of them), each lock controls one segment of the hash.
When setting data in a particular segment, the lock for that segment is obtained.
When getting data, a volatile read is used. If the volatile read results in a miss, then the lock for the segment is obtained for a last attempt at a successful read.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…