各位高手,jdk源码中的这段代码为什么这么写?

ArrayBlockingQueue

public E take() throws InterruptedException {

final ReentrantLock lock = this.lock;

lock.lockInterruptibly();

try {

while (count == 0)

notEmpty.await();

return dequeue();

} finally {

lock.unlock();

}

}

为什么要方法内先通过声明final类型的变量来获取对this.lock的引用?直接用不可以吗?


回答:

赋值给局部变量,接下来就不需要考虑这个变量的并发修改问题了。成员变量存在并发中,没有办法保证它的状态不会在其他线程中被修改。


回答:

底层代码,把成员变量赋值给局部变量以提高(一丢丢)性能
其他地方也很常见这种写法,毕竟是底层,抠性能还是很值得的


回答:

1.成员变量再次赋值给局部变量,指定JVM去使用赋值后的局部变量,无需理会成员变量,此时JVM就可以将该变量放在CPU缓存中,每次从CPU缓存中读取变量的值,不用去内存中重新加载,提高了运行速度。

2.这是一种激进的优化策略,通过增加字节码来换取速度,相当于用空间换时间。而且作用其实并不大,除非某个方法频繁被执行、并且业务需求极其追求速度,否则并不建议在日常编程中这样写

以上是 各位高手,jdk源码中的这段代码为什么这么写? 的全部内容, 来源链接: utcz.com/p/944081.html

回到顶部