多线程环境-final变量

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

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

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

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

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

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

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 本文是我自己在秋招复习时的读书笔记,整理的知识点,也是为了防止忘记,尊重劳动成果,转载注明出处哦!如果你也喜欢,那...
    波波波先森阅读 13,902评论 4 56
  • 目录: 1. 指令重排 2. 顺序一致性 3. volatile 4. final 1.指令重排 要了解指令重排,...
    西部小笼包阅读 4,214评论 0 1
  • 从三月份找实习到现在,面了一些公司,挂了不少,但最终还是拿到小米、百度、阿里、京东、新浪、CVTE、乐视家的研发岗...
    时芥蓝阅读 42,532评论 11 349
  • 插入排序 算法描述 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描...
    Saber真是太可爱了阅读 3,427评论 0 0
  • 又是一年毕业季,又是一个分离的季节,那么长的路我们终将自己走完。说不清道不明的悲伤都在这一刻四散开来,未来我...
    夏目的守护阅读 1,711评论 1 0

友情链接更多精彩内容