理解final
首先,我们知道的是,final修饰的变量都是不能改变的,也就是说其他线程都修改不了;
特点:1、不可继承,不可重写;2、final修饰而局部参数,都是需要初始化的;
作用:
它会在赋值之后加上一个写屏障——>1.有序性:保障写屏障之前的操作不会重排序到写屏障之后;2.读可见:写屏障之前的所有修改、赋值操作都会同步到主存中;
体现出了只读不能改;
举个例子:
如果没有final,默认是0,那么其他线程就会读取到a为0的情况,但是你加上final,就不会出现,没有二义性
赋值时机:
只有静态常量是在类加载准备阶段直接赋值,其他都是在对象初始化的时候赋值;