美文网首页
多线程环境-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变量

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

  • final关键字 多线程

    多线程之 Final变量 详解 原文: http://www.tuicool.com/articles/2Yjmq...

  • java final关键字的一些理解

    总结:final可以修饰变量(成员变量+局部变量)、方法和类;final变量不能再次赋值;final成员变量必须在...

  • Java基础_final修饰符

    final修饰变量 final关键字可以修饰类、变量、方法。 final修饰符 final修饰的变量不可被改变,一...

  • Java之final

    final可以修饰变量、方法、类。 final修饰变量 final修饰成员属性(变量)必须初始化; 修饰局部变量使...

  • 代码查错

    final关键字 final修饰变量 final关键字修饰变量,意为不可改变。 final修饰成员变量,两种方式初...

  • Java中的final关键字

    final 关键字 final关键字可以用来修饰变量、方法、类。 final 变量 被声明为final的变量是只读...

  • abstract,final,interface,static,

    final final 可以用于成员变量,本地变量(局部变量),方法以及类 final 成员变量必须在声明的时候初...

  • 面向对象--final关键字

    final的变量的值不能够被改变final的成员变量final的局部变量(形参) final的方法不能被重写 fi...

  • day7-java基础(final、内部类、匿名对象、stati

    final 关键字 final 的作用: 1)变量的:如果使用 final 关键字修饰一个变量,则意味这个变量最...

网友评论

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

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