CurrentHashMap 的分段加锁
get 操作不加锁,原因是使用volatile
static final class HashEntry<K,V> {
final int hash;
final K key;
volatile V value;
volatile HashEntry<K,V> next;
put操作在单个segment内部加锁,继承ReentrantLock 并执行tryLock 和 unlock
static final class Segment<K,V> extends ReentrantLock implements Serializable
final V put(K key, int hash, V value, boolean onlyIfAbsent) {
HashEntry<K,V> node = tryLock() ? null :
scanAndLockForPut(key, hash, value);
V oldValue;
try {
HashEntry<K,V>[] tab = table;