美文网首页
多线程环境-final变量

多线程环境-final变量

作者: 小超人爱小土豆 | 来源:发表于2018-08-16 17:36 被阅读22次

        之前学习多线程的时候,记得在多线程环境下变量要定义为private,这死记硬背的东西就是不行,后来并发编程的时候发现,根本不是要定义为private而是用final定义变量。

        具体的原理是:通过final修饰来禁止cpu的指令重排,来提供线程的可见性,来保证对象的安全发布,防止对象引用被其它线程在对象被完全构造完成之前拿到并使用。

        与前面锁和volatile相比较,对final域的读和写更像是普通的变量访问。对于final域,编译器和处理器要遵守两个重排序规则:

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

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

        与Volatile 有相似作用,不过Final主要用于不可变变量(基本数据类型和非基本数据类型),进行安全的发布(初始化)。而Volatile可以用于安全的发布不可变变量,也可以提供可变变量的可见性。

    相关文章

      网友评论

          本文标题:多线程环境-final变量

          本文链接:https://www.haomeiwen.com/subject/xayobftx.html