Во многих источниках 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, поэтому я почти уверен, что он существует по какой-то причине. Пожалуйста, не указывайте, что код просто эквивалентен.
Спасибо