java final关键字的作用
SE部分的知识
- 作用在变量上,变量只能赋一次值,之后不能修改;作用在引用上,引用不能更改,但是引用所指的对象是可以修改的
- 作用在类上不能被继承
- 作用在方法上,不能被override
多线程相关
- 在构造函数内,对一个final域的赋值一定会在该对象的引用赋值给一个变量之前。这句话的意思就是一定会先完成初始化再将对象赋值给变量,若不加final,重排序可能会导致先将引用赋给了变量,当访问成员变量时,数据可能还是使用的默认变量。
- 初次读一个包含final域对象的引用,会先读引用,再读final域。如果读到引用为null,说明对象还没初始化完成。如果读的是不加final修饰的变量,不会有这种效果!!!
参考《JAVA并发编程的艺术》