<分区>
我最近检查了 OpenJDK 源代码中 j.u.c.CopyOnWriteArrayList 的实现,发现类中定义的锁变量用以下语句重新声明
final ReentrantLock lock = this.lock;
在所有需要这个变量的方法中。对变量进行此类重新声明的任何特定原因(可能隐藏全局变量)。我们不能简单地直接使用对象的“锁定”字段吗。
标签 java concurrency
<分区>
我最近检查了 OpenJDK 源代码中 j.u.c.CopyOnWriteArrayList 的实现,发现类中定义的锁变量用以下语句重新声明
final ReentrantLock lock = this.lock;
在所有需要这个变量的方法中。对变量进行此类重新声明的任何特定原因(可能隐藏全局变量)。我们不能简单地直接使用对象的“锁定”字段吗。
最佳答案
那只是一种微优化技术。理论上,访问局部变量比访问字段更快,而且它也可能导致更小的字节码。尽管 HotSpot 编译器实际上可能优化了对寄存器调用的字段访问,所以它不会有什么不同。
关于java - 为什么 j.u.c.CopyOnWriteArrayList 在方法内部创建局部锁变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3866537/