final的数据缓存放在寄存器中,对比必须要加载non-final数据的情况下,它不需要从主内存中加载就可以获取
并发线程下是安全的(不可变的变量)
对于final修饰的字段在所有线程中是属于不可变(基本类型值不可变...DefineFinalObject()创建对象并引用对应的对象地址
在main的线程方法中,可以对不可变的defineFinalObject的属性信息进行修改,说明引用类型不可变是指对应的对象内存地址...原则,线程访问final的数据一定是在完成初始化后的最终数据且无法再进行修改(引用类型是可以修改其属性信息),从而保证了线程对final修饰的变量是属于线程安全的共享数据
final与static使用分析...copy一份相同的数据作为缓存,不需要读取主内存的数据,同时final的写是在构造器中完成,也就是在构造器中添加内存屏障,也保证了在对象构造器之外不能再对final的数据的修改操作进行重新排序
同理,对于...final修饰的变量为最新版本的数据
如果在构造器函数中执行final变量的读操作在写操作之后,那么会看到final分配给变量的最终最新版本的数据
读取共享变量的final数据,则必须先要访问这个共享变量的引用对象然后再读取