并发学习-final

  1. 对于 final 域,编译器和CPU要遵守两个重排序规则:
    final 写:“构造函数内对一个final域的写入”,与“随后把这个被构造对象的引用赋值给一个引用变量”,这两个操作之间不能重排序。
    final 读:“初次读一个包含final域的对象的引用”,与“随后初次读对象的final域”,这两个操作之间不能重排序。
  2. 写 final 域的重排序规则禁止把 final 域的写重排序到构造函数之外。这个规则的实现包含下面两个方面:
    1, JMM 禁止编译器把 final 域的写重排序到构造函数之外。
    2, 编译器会在 final 域的写之后,构造函数 return 之前,插入一个 StoreStore 屏障。这个屏障禁止处理器把 final 域的写重排序到构造函数之外。
  3. 读 final 域的重排序规则如下:
    在一个线程中,“初次读对象引用"与"初次读该对象包含的 final 域”,JMM 禁止处理器重排序这两个操作(注意,这个规则仅仅针对处理器)。
    编译器会在读 final 域操作的前面插入一个 LoadLoad 屏障。
    初次度该对象与读该对象的final域有关联关系,大多数处理器不会进行重新排序,少量处理器会允许对具有间接关联关系的两个操作重新排序,如alpha处理器,该规则就是针对这类处理器的
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值