2

可能这对我来说很愚蠢,但我查看了源代码ConcurrentHashMap,我无法lock()在该类的任何地方看到该方法的定义,但我可以看到该方法在多个场合被调用。在 Eclipse 中,当我说打开声明时lock(),它会显示类ReentrantLock.lock(),所以我很困惑这是如何工作的?ReentrantLocklock() 方法调用的对象引用在哪里?

 V readValueUnderLock(HashEntry<K,V> e) {
        lock(); // where is this method defined in CHM ?
        try {
            return e.value;
        } finally {
            unlock();
        }
    }
4

2 回答 2

8

ConcurrentHashMap该代码片段位于被调用的内部类中Segment,该类扩展ReentrantLock

于 2012-01-07T21:10:49.900 回答
0

ConcurrentHashMap 中没有 lock 方法。看看它的 javadoc。所以我看不出你怎么能看到这个不存在的方法的任何代码。

readValueUnderLock是内部类的一个方法Segment,它扩展了ReentrantLock。所以你看到的lock方法就是ReentrantLock的lock方法。

于 2012-01-07T21:14:17.637 回答