news 2026/4/18 4:01:30

Java并发编程中的final域介绍

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Java并发编程中的final域介绍

      与锁和volatile相比,对final域的读和写更像是普通的变量访问。下面将介绍final域的内存语义。

一、final域的重排序规则

对于final域,编译器和处理器要遵守两个重排序规则。

1)在构造函数内对一个final域的写入,与随后把这个被构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。例如这里的(1)和(3)之间不能重排序。

2)初次读一个包含final域的对象的引用,与随后初次读这个final域,这两个操作之间不能重排序。例如这里的(2)和(2)之间不能重排序。

下面通过一些示例性的代码来分别说明这两个规则。

public class FinalExample { int i; // 普通变量 final int j; // final变量 static FinalExample obj; public FinalExample() { // 构造函数 (1) i = 1; // 写普通域 j = 2; // 写final域 } public static void writer() { // 写线程A执行 obj = new FinalExample(); } public static void reader() { // 读线程B执行 (2) FinalExample object = obj; // 读对象引用(3) int a = object.i; // 读普通域 int b = object.j; // 读final域 } }

       假设一个线程A执行writer()方法,随后另一个线程B执行reader()方法。下面我们通过这两个线程的交互来说明这两个规则。

二、写final域的重排序规则

       写final域的重排序规则禁止把final域的写重排序到构造函数之外。这个规则的实现包含下面2个方面。

     

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 5:36:00

NPP 温带森林:美国田纳西州大烟山国家公园,1968-1992 年,R1

NPP Temperate Forest: Great Smoky Mountains, Tennessee, USA, 1968-1992, R1 简介 该数据集包含两个数据文件(.csv 格式)。一个文件包含田纳西州大烟山国家公园七个原始温带森林林分和一个幼龄山谷林分的立地特征、林分描述符以及地上生物量和地上净…

作者头像 李华
网站建设 2026/4/17 12:42:24

社交媒体话题热度预测:公关策略制定依据

社交媒体话题热度预测:公关策略制定依据 在一场突发公共事件爆发后的前五分钟,社交媒体上的讨论量可能已经翻了十倍。对于公关团队而言,这短短几分钟决定了是主动引导舆论,还是陷入被动回应的泥潭。如何让AI模型在这场“速度竞赛”…

作者头像 李华
网站建设 2026/4/17 21:32:33

互联网大厂Java面试场景:从Spring到微服务的全面考核

场景描述 在一家知名互联网大厂的初试面试中,面试官是一位严肃而经验丰富的技术主管,而求职者是一个名叫超好吃的Java小白程序员,双方展开了一场关于Java技术栈的深度交流。 第一天:基础技术考核 面试官: "超好吃…

作者头像 李华
网站建设 2026/4/17 4:24:23

Hadoop序列化和java序列化的区别

Hadoop序列化与Java序列化的主要区别体现在设计目标、实现方式和适用场景上,以下是核心差异:1. 设计目标Java序列化面向通用对象持久化与网络传输,强调跨平台兼容性和对象完整性(如保留类继承结构、字段类型等)&#x…

作者头像 李华
网站建设 2026/4/18 6:27:10

8个AI论文工具推荐,继续教育学生轻松搞定毕业论文!

8个AI论文工具推荐,继续教育学生轻松搞定毕业论文! AI 工具如何助力论文写作? 在当前的学术环境中,越来越多的继续教育学生开始借助 AI 工具来辅助论文写作。这些工具不仅能够帮助学生节省大量时间,还能有效降低 AIGC&…

作者头像 李华