ConcurrentHashMap中的get()方法为什么可以不加锁?
澳门赌场开户
澳门赌场开户
当前位置 : 澳门赌场开户 > 在线博彩导航

ConcurrentHashMap中的get()方法为什么可以不加锁?

 public V getObject key {
        Segment<K,V> s; // manually integrate access methods to reduce overhead
        HashEntry<K,V>[] tab;
        int h = hashkey;
        long u = h >>> segmentShift & segmentMask << SSHIFT + SBASE;
        if s = Segment<K,V>UNSAFE.getObjectVolatilesegments, u != null &&
            tab = s.table != null {
            for HashEntry<K,V> e = HashEntry<K,V> UNSAFE.getObjectVolatile
                     tab, longtab.length - 1 & h << TSHIFT + TBASE;
                 e != null; e = e.next {
                K k;
                if k = e.key == key || e.hash == h && key.equalsk
                    return e.value;
            }
        }
        return null;
    }

为什么Vector的get就需要使用synchronized来加锁而ConcurrentHashMap则不需要?而且CopyOnWriteArrayList也是使用了写时复制还能实现读写并行,而显然ConcrrentHashMap并没有实现写时复制,它是怎么保证读写并行时不会读取到不一致中间状态的呢?

栏目列表

广告位

澳门赌场开户