当前位置:编程学习 > JAVA >>

JDK7.0的ConcurrentHashMap

在map的remove方法中调用了Segment的remove方法。
这个方法里首先会尝试tryLock,如果失败,调用scanAndLock。
在scanAndLock里会在尝试tryLock一定次数以后调用lock方法,直到获取锁后break跳出scanAndLock。

问题:
scanAndLock方法中的这部分:
if (retries < 0) {
    if (e == null || key.equals(e.key))
        retries = 0;
    else
        e = e.next;
}
会遍历HashEntry链表,它的作用是什么? 并发 集合 --------------------编程问答-------------------- --------------------编程问答-------------------- 看上去是停止条件啊 --------------------编程问答-------------------- private void scanAndLock(Object key, int hash) {
            // similar to but simpler than scanAndLockForPut
            HashEntry<K,V> first = entryForHash(this, hash);
            HashEntry<K,V> e = first;
            int retries = -1;
            while (!tryLock()) {
                HashEntry<K,V> f;
                if (retries < 0) {
                    if (e == null || key.equals(e.key))
                        retries = 0;
                    else
                        e = e.next;
                }
                else if (++retries > MAX_SCAN_RETRIES) {
                    lock();
                    break;
                }
                else if ((retries & 1) == 0 &&
                         (f = entryForHash(this, hash)) != first) {
                    e = first = f;
                    retries = -1;
                }
            }
        }

停止的条件是tryLock成功获取锁之后返回true跳出while循环
或者重试次数超过max,调用阻塞线程的lock成功获取锁之后,break跳出while循环吧
补充:Java ,  Web 开发
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,