为什么在锁定前复制引用?

Rom*_*les 5 java concurrency locking

我想知道为什么我们可以在java.util.concurrent类中看到这种类型的代码模式:

public class ArrayBlockingQueue...
    ...
    final ReentrantLock lock;
    ...
    public boolean offer(E e) {
    checkNotNull(e);
    final ReentrantLock lock = this.lock;
    lock.lock();
    try {
        ...
    } finally {
        lock.unlock();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么在调用lock()和unlock()方法之前我们必须复制对锁的引用,因为lock属性是final.

谢谢你的帮助,

罗曼.