gpt4 book ai didi

Java 在使用前锁定变量赋值。为什么?

转载 作者:行者123 更新时间:2023-11-30 12:05:41 25 4
gpt4 key购买 nike

在很多 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 变量进行赋值?为什么这样做而不是以下? p>

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,所以我很确定它在那里是有原因的。请不要指出代码只是等价的。

谢谢

最佳答案

当你在方法中赋值给局部变量时,编译器可以做一些优化。见In ArrayBlockingQueue, why copy final member field into local final variable?

关于Java 在使用前锁定变量赋值。为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56133375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com