2012-01-07 4 views
2

これは私の愚かなことかもしれませんが、ConcurrentHashMapのソースコードを見て、そのクラスのどこにでもメソッドlock()の定義を見ることができませんでしたが、いくつかの機会に呼び出されます。 Eclipseの場合、lock()の公開宣言をすると、クラスReentrantLock.lock()が表示されるので、これがどのように動作するのか混乱していますか? lock()メソッド呼び出しのためのReentrantLockのオブジェクト参照はどこにありますか?コードフラグメントはReentrantLockConcurrentHashMapのlock()メソッド

答えて

8

its javadocを見てください。だから私はどのようにこの存在しないメソッドに任意のコードを見たことができないか分かりません。

readValueUnderLockは、ReentrantLockを拡張する内部クラスSegmentの方法です。だからあなたが見ているロックメソッドは、ReentrantLockのロックメソッドです。

+0

はい、私はまったくスクロールせず、入れ子になったクラスを見ていませんでした。 – Bhaskar

+0

+1 'static final class Segment ReentrantLock' –

0

のConcurrentHashMapにはロック方法はありませんを拡張Segment呼ばConcurrentHashMap内の内部クラス、内部にあること

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

絶対に、私の悪い、本当に! – Bhaskar