我首先想到的是它以某种方式帮助并发…
…所以我想这是优化程序的一些提示…
都。:-)
linkedList不支持并发的事实并不意味着作者无论如何都不会遵循良好实践,并且告诉编译器和JIT他们只应该查找
first一次
。
没有
f局部变量,我们将有:
public E peek() { return (this.first == null) ? null : this.first.item;}我已经添加了一个暗示,
this.以强调这
first是一个实例字段。
因此,如果
this.first == null零件在线程A上进行评估,然后
this.first在线程B
this.first.item上进行更改,则在线程A
上进行评估时,它可能会因为在此期间
this.first变成而抛出
null。使用
f,这是不可能的,因为它
f是本地的;只有运行
peek调用的线程才能看到它。
该
final部分既是优秀的代码文档(因为作者从不打算更改的值
f),也向优化器暗示了我们永远都不会改变
f,这意味着当需要进行优化时,它可以对其进行优化。知道它只需要读
this.first
一次 ,然后就可以使用寄存器或堆栈值进行
null校验和返回,直到其寿命只有一英寸。



