全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

java中final域的内存语义理解

发布时间:2022-08-10 16:49:01
发布人:qyf

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培训”的问题,欢迎咨询千锋教育在线名师。千锋教育多年办学,课程大纲紧跟企业需求,更科学更严谨,每年培养泛IT人才近2万人。不论你是零基础还是想提升,都可以找到适合的班型,千锋教育随时欢迎你来试听。

相关文章

数据库的搭建过程是什么样的?

数据库的搭建过程是什么样的?

2023-10-14
oracle存储过程怎么写?

oracle存储过程怎么写?

2023-10-14
IT通常说的平台是什么意思?

IT通常说的平台是什么意思?

2023-10-14
结构化数据的相似度怎么计算?

结构化数据的相似度怎么计算?

2023-10-14

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取