【说站】java中final域的内存语义理解
2024-12-27
42
java中final域的内存语义理解
说明
1、对于final域的内存语义,编译器和处理器要遵守两个重排序规则(内部实现也是使用内存屏障):
2、写final域的重排序规则:在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。
读final域的重排序规则:初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。
实例
public class FinalExample { int i;//普通域 final int j;//final域 static FinalExample obj; public FinalExample () { i = 1;//写普通域。对普通域的写操作【可能会】被重排序到构造函数之外 j = 2;//写final域。对final域的写操作【不会】被重排序到构造函数之外 } // 写线程A执行 public static void writer () {? obj = new FinalExample (); } // 读线程B执行 public static void reader () {? FinalExample object = obj;//读对象引用 int a = object.i;//读普通域。可能会看到结果为0(由于i=1可能被重排序到构造函数外,此时y还没有被初始化) int b = object.j;//读final域。保证能够看到结果为2 } }
以上就是java中final域的内存语义理解,希望对大家有所帮助。更多Java学习指路:Java基础
本教程操作环境:windows7系统、java10版,DELL G3电脑。
更新于:24天前赞一波!
相关文章
- 【说站】javascript内存泄漏的识别方法
- 【说站】js内存的生命周期介绍
- 【说站】java类加载器的分类
- 【说站】java类的两种引用方法
- 【说站】java转义字符
- 【说站】java基本数据类型
- 【说站】java动态和静态语言的比较
- 【说站】java中Class类的概念介绍
- 【说站】java多态的向上转型是什么
- 【说站】java向下转型是什么意思
- 【说站】java重写发生的条件
- 【说站】java动态绑定怎么用
- 【说站】java多态的好处
- 【说站】java对象池的使用步骤
- 【说站】java向上转型发生的时机
- 【说站】java中变量的使用注意
- 【说站】java类加载的过程
- 【说站】java反射如何调用指定的属性
- 【说站】java RMI的工作过程
- 【说站】java反射机制提供哪些功能
文章评论
评论问答