可能这对我来说很愚蠢,但是我查看了ConcurrentHashMap
的源代码,我无法在该类的任何地方看到方法lock()
的定义,但我可以看到这种方法有几次被调用。在Eclipse中,当我在lock()
上说开放声明时,它显示了类ReentrantLock.lock()
,所以我很困惑这是如何工作的? lock()方法调用的ReentrantLock
的对象引用在哪里?
V readValueUnderLock(HashEntry<K,V> e) {
lock(); // where is this method defined in CHM ?
try {
return e.value;
} finally {
unlock();
}
}
答案 0 :(得分:8)
该代码片段位于名为ConcurrentHashMap
的{{1}}内的内部类中,扩展了Segment
答案 1 :(得分:0)
ConcurrentHashMap中没有锁定方法。看看its javadoc。所以我看不出你怎么能看到这个不存在的方法的任何代码。
readValueUnderLock
是内部类Segment
的一种方法,它扩展了ReentrantLock
。所以你看到的锁定方法是ReentrantLock的锁定方法。