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

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

  2:初次读一个包含final域的对象的引用,与随后初次都这个final域,这两个操作之间不能重排序。

 

对于引用类型。写final域的重排序规则对编译器和处理器增加了如下约束:

  在构造函数内对一个final引用的对象的成员域的写入,与随后在构造函数外把这个构造对象的引用赋值给一个引用变量,这两个操作之间不能重排序。

 

写final域的重排序规则可以确保:在引用变量为任意线程可见之前,该引用变量指向的对象的final域已经在构造函数中被正确初始化过了。

posted on 2017-11-23 19:55  飞奔的菜鸟  阅读(180)  评论(0编辑  收藏  举报