2012-01-07 58 views
2

可能這對我來說很愚蠢,但我查看了ConcurrentHashMap的源代碼,但我無法看到該類中任何位置的方法lock()的定義,但是我可以看到此方法被多次援引。在Eclipse中,當我在lock()上說開放聲明時,它顯示類ReentrantLock.lock(),所以我很困惑這是如何工作的?對於lock()方法調用,ReentrantLock的對象引用在哪裏?ConcurrentHashMap中的lock()方法

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

回答

8

該代碼片段是內ConcurrentHashMap內部類稱爲Segment,其延伸ReentrantLock

+0

是的,我真的很愚蠢,不向上滾動並查看嵌套類。 – Bhaskar 2012-01-07 21:21:51

+0

+1'static final class段擴展ReentrantLock' – 2012-01-07 21:22:45

0

有一個在ConcurrentHashMap的無鎖方法內。看看its javadoc。所以我不明白你如何看到這個不存在的方法的任何代碼。

readValueUnderLock是內部類Segment的一種方法,它擴展了ReentrantLock。所以你看到的鎖定方法是ReentrantLock的鎖定方法。

+0

絕對,我的確不好! – Bhaskar 2012-01-07 21:22:32