Назначение переменной Java Lock перед использованием. Почему?

Во многих источниках Java (например, LinkedBlockingDeque ) я вижу такие вещи;

final ReentrantLock lock = new ReentrantLock();

public void putLast(E e) throws InterruptedException {
    final ReentrantLock lock = this.lock;
    lock.lock();
    try {
       // do stuff
    } finally {
        lock.unlock();
    }
}

Я понимаю основной шаблон (заблокировать, наконец разблокировать), но мой вопрос зачем делать присвоение переменной Lock с локальной областью видимости перед ее использованием? Почему это делается вместо следующего?

final ReentrantLock lock = new ReentrantLock();

public void putLast(E e) throws InterruptedException {
    this.lock.lock();
    try {
       // do stuff
    } finally {
        lock.unlock();
    }
}

Повлияет ли это на оптимизацию? Может ли первый пример предотвратить укрупнение блокировки?

ИЗМЕНИТЬ после комментариев : Не добавляйте ответ, если вы действительно не знаете, почему это так. Это из источника Java, тег @author - это Doug Lea, поэтому я почти уверен, что он существует по какой-то причине. Пожалуйста, не указывайте, что код просто эквивалентен.

Спасибо

7
задан Toby 12 March 2012 в 11:49
поделиться