volatile是轻量级的synchronized,它在多处理器开发中保证了共享变量的"可见性"。可见性是说当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值。
volatile的定义和实现原理
java语言规范第三版中对volatile的定义如下:Java编程语言允许线程访问共享变量,为了共享变量能被准确和一致的更新,线程应该确保通过排它锁单独获得这个变量。
 
instance = new Singleton();//instance是volatile共享变量
有volatile变量修饰的共享变量在进行写操作时会多出第二行汇编代码,其中包含lock前缀指令
 
volatile两条实现原理:
1.Lock前缀指令会引起处理器缓存会写到内存
2.一个处理器的缓存会写到内存,会导致其他处理器的缓存无效
处理器不会和内存通信,因为速度问题,是先将系统内存的数据读到内部缓存在操作,操作完不知何时回写回系统内存。
如果使用volatile的变量进行写操作,JVM会发送lock前缀指令,将变量所在缓存行的数据写回系统内存。
 
volatile的使用优化
队列集合类LinkedTransferQueue,在使用volatile变量时,追加64字节的方式来优化队列出队和入队的性能。
 
synchronized的实现原理和应用
普通同步方法,锁是当前实例对象
静态同步方法,锁是当前类的Class对象
同步方法块,锁是synchronized括号里配置的对象

java并发机制的底层实现原理的更多相关文章

  1. 《Java并发编程的艺术》Java并发机制的底层实现原理(二)

    Java并发机制的底层实现原理 1.volatile volatile相当于轻量级的synchronized,在并发编程中保证数据的可见性,使用 valotile 修饰的变量,其内存模型会增加一个 L ...

  2. 【java并发编程艺术学习】(三)第二章 java并发机制的底层实现原理 学习记录(一) volatile

    章节介绍 这一章节主要学习java并发机制的底层实现原理.主要学习volatile.synchronized和原子操作的实现原理.Java中的大部分容器和框架都依赖于此. Java代码 ==经过编译= ...

  3. Java 并发系列之二:java 并发机制的底层实现原理

    1. 处理器实现原子操作 2. volatile /** 补充: 主要作用:内存可见性,是变量在多个线程中可见,修饰变量,解决一写多读的问题. 轻量级的synchronized,不会造成阻塞.性能比s ...

  4. Java并发机制的底层实现原理之volatile应用,初学者误看!

    volatile的介绍: Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现 ...

  5. 《Java并发编程的艺术》读书笔记:二、Java并发机制的底层实现原理

    二.Java并发机制底层实现原理 这里是我的<Java并发编程的艺术>读书笔记的第二篇,对前文有兴趣的朋友可以去这里看第一篇:一.并发编程的目的与挑战 有兴趣讨论的朋友可以给我留言! 1. ...

  6. (第二章)Java并发机制的底层实现原理

    一.概述 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. ...

  7. Java并发机制和底层实现原理

    Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码转化为汇编指令在CPU上执行.Java中的并发机制依赖于JVM的实现和CPU的指令. Java语言规范第三版中 ...

  8. 并发艺术--java并发机制的底层实现原理

    前言 Java代码在编译后会变成Java字节码,字节码被类加载器加载到JVM里,JVM执行字节码,最终需要转化为汇编指令在CPU上执行,Java中所使用的并发机制依赖于JVM的实现和CPU的指令. 一 ...

  9. 【java并发编程艺术学习】(五)第二章 java并发机制的底层实现原理 学习记录(三) 原子操作的实现原理学习

    章节介绍 主要包括 术语定义.处理器如何实现原子操作.Java如何实现原子操作: 原子(atomic)本意是 不能再进一步分割的最小粒子,“原子操作” 意为 不可被中断的一个或一系列操作. 术语定义 ...

随机推荐

  1. Linux环境变量从用户配置改为系统配置

    部署了一个新的tomcat到一个新的用户下,发下启动失败了 /home/personal/apache-tomcat/bin/catalina.sh: line 434: /usr/lib/jvm/j ...

  2. centOS下 JDK的三种安装方式

    由于各Linux开发厂商的不同,因此不同开发厂商的Linux版本操作细节也不一样,今天就来说一下CentOS下JDK的安装: 方法一:手动解压JDK的压缩包,然后设置环境变量 1.在/usr/目录下创 ...

  3. 如何在 C#中添加 dll 文件

    按住鼠标左键,按住dll文件 ,然后将其拖动到工具箱里面 ,就出现了如图所示的控件

  4. CAD库中统计PBN运行航路条数和总距离

    select 'PBN运行航路' 类型, fb.b 总条数, fa.a 总距离 from                (                select sum(s)  a  from ...

  5. day4心得

    装饰器: 定义:本质就是函数,(装饰其他函数)就是为其他函数添加附加功能 原则:1.不能修改被装饰的函数的源代码 2.不能修改被装饰的函数的调用方式 实现装饰器知识储备: 1.函数即"变量& ...

  6. ndnarry矩阵处理

    ndarray的矩阵运算 数组是编程中的概念,矩阵.矢量是数学概念. 在计算机编程中,矩阵可以用数组形式定义,矢量可以用结构定义! 1. 矢量运算:相同大小的数组间运算应用在元素上 示例代码(1): ...

  7. python---mysql 学习笔记

    数据库------mysql 安装: linux----centos7: 在CentOS中默认安装有MariaDB,这个是MySQL的分支,但为了需要,还是要在系统中安装MySQL,而且安装完成之后可 ...

  8. leetcode773

    使用两种语言实现,先贴C++的 class Solution { public: vector<vector<int>> floodFill(vector<vector& ...

  9. Pascal三角形

    Pascal算法呢,很简单,因为有了推导公式nCr,而当我们刚刚接触一个事物时,面对要解决的问题,归纳分析得到规律,再通过编程,控制流程,对象,语言,方法,属性得到我们想要的结果.如果这次不是PAsc ...

  10. bash&nbsp;shell笔记5&nbsp;显示数据

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://twentyfour.blog.51cto.com/945260/521455 知 ...