美文网首页
volatile/final

volatile/final

作者: Wi1ls努力努力再努力 | 来源:发表于2019-05-09 22:57 被阅读0次
  • 对于单个 volatile变量的读/写具有原子性;复合操作不具有原子性,如 volatile++。
  • 对 volatile 的写操作会使 JVM 将该线程对应的本地内存中的共享变量刷新到主内存。
  • 对 volatile 的 读操作,会使 JVM 将该线程对应的本地内存置为无效,强行从主内存读取共享变量。
  • 为了实现 volatile 内存语义,JVM 会限制编译器重排序和处理器重排序

  • 在构造函数内对一个 final 域的写入,与随后把这个被构造函数的引用赋值给一个引用变量,这两个操作之间不能重排序。
    • JVM 禁止编译器把 final 域的写重排序到构造函数之外。
    • 编译器会在 final 域的写之后,构造函数的 return 之前,插入一个 StoreStore 屏障,这个屏障禁止处理器把 final 域的写重排序到构造函数之外。
    • 编译器会在读 final 域的操作前面插入一个 LoadLoad 屏障。
  • 初次读一个包含 final 域的对象的引用,与随后初次读这个 final 域,这两个操作之间不能重排序。
  • 在构造函数内对一个 final 引用的对象的成员域的写入,在随后在构造函数外把这个被构造函数对象的引用赋值给一个引用变量,这两个操作不能重排序。

相关文章

  • 防止指令重排的方式

    volatile 加锁 final修饰

  • volatile/final

    对于单个 volatile变量的读/写具有原子性;复合操作不具有原子性,如 volatile++。 对 volat...

  • Java并发文章目录

    01:Java内存模型 02:volatile synchronized final的...

  • final、volatile、synchronized

    上节说到final、volatile、synchronized这三个关键字,个人感觉这三个关键字应该是在多线程中使...

  • 9.volatile、final

    1.变量写入原子性问题 long和double是64位的,当32位的机器上为这两种类型变量赋值,可能被拆分成两个3...

  • Java并发知识体系详解

    Java 并发相关知识体系详解,包含理论基础,线程基础,synchronized,volatile,final关键...

  • JMM内存模型--final域的内存语义

    与前面介绍的锁和volatile相比,对final域的读和写更像是普通的变量访问。下面介绍final域的内存语义 ...

  • volatile synchronized final的内存语

    本篇文章介绍volatile synchronized final 关键的基本概念以及的内存语义,通过自身的内存...

  • Java学习--我需要掌握的技术

    关于专业需要点亮的技能 1. 基本语法 static,final,transient,volatile等关键字 2...

  • 6

    Java内存模型定义了Java语言中的synchronized、volatile和final等关键词对主存中变量读...

网友评论

      本文标题:volatile/final

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