并发编程系列之Final域的内存语义

前言

上节我们讲了锁的内存语义,在同步原语中我们已经讲了两个,今天再来介绍另一个同步原语Final域,了解下final域的内存语义以及重排序规则在处理器中又是如何实现的,并结合前面的volatile和锁,大家可以进行对比下,OK,开始我们今天的并发之旅吧。

final域的重排序规则

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

  • 对一个构造函数内final域的写入,与后续把这个构造对象的引用赋值给一个引用变量,这2个操作之间是不能重排序的,相当于对一个final域的写和读不能重排序;

  • 对一个final域对象的引用第一次读,和后续初次读这个final域本身,这2个操作之间不能重排序,相当于第一次读final域引用和final域不能重排序;

final域写的重排序规则

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

  • JMM禁止编译器把final域的写重排序到构造函数之外;

  • 编译器会在final域的写入之后,构造函数return之前,插入一个StoreStore屏障。这个屏障禁止

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Justin的后端书架

codeing不易,赏个鸡腿吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值