метод lock () в ConcurrentHashMap - PullRequest
       14

метод lock () в ConcurrentHashMap

2 голосов
/ 08 января 2012

Может быть, это глупо с моей стороны, но я посмотрел исходный код для ConcurrentHashMap и не смог увидеть определение метода lock() где-либо в этом классе, но я вижу, что этот метод вызывается в нескольких случаях. В Eclipse, когда я говорю open объявление о lock(), он показывает класс ReentrantLock.lock(), поэтому я не понимаю, как это работает? Где ссылка на объект ReentrantLock для вызова метода lock ()?

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

Ответы [ 2 ]

8 голосов
/ 08 января 2012

Этот фрагмент кода находится внутри внутреннего класса в ConcurrentHashMap, называемого Segment, который расширяет ReentrantLock

0 голосов
/ 08 января 2012

В ConcurrentHashMap нет метода блокировки. Посмотрите на его Javadoc . Так что я не понимаю, как вы могли увидеть какой-либо код этого несуществующего метода.

readValueUnderLock - это метод внутреннего класса Segment, который расширяет ReentrantLock. Таким образом, метод блокировки, который вы видите, является методом блокировки ReentrantLock.

...