7.final
文章目录 1. final的指令重排 1.1. 赋值`final属性`的指令重排 1.2. 读取`final属性`的指令重排 1.3. `final属性`为引用类型 1. final的指令重排 对于 final 域,编译器和处理器要遵守两个重排序规则。 在构造函数内对一个 final变量 赋值,与随后把这个被构造对象的引用赋值给一个变量,这两个操作之间不能重排序 初次读一个包含final变量的对象,与随后初次读这个final变量,这两个操作之间不能重排序 public class FinalExample { int i; // 普通变量 final int j; // final 变量 static FinalExample obj; public FinalExample () { // 构造函数 i = 1; // 写普通域 j = 2; // 写 final 域 } public static void writer () { // 写线程 A 执行 obj = new FinalExample (); } public static void reader () { // 读线程 B 执行 FinalExample object = obj; // 读对象引用 int a = object.i;