volatile特点:

关键字volatile是Java虚拟机提供的最轻量级的同步机制 。 当一个变量被定义成volatile之后,具备两种特性:

  1. 保证此变量对所有线程的可见性。当一条线程修改了这个变量的值,新值对于其他线程是可以立即得知的。而普通变量做不到这一点。
  2. 禁止指令重排序优化。普通变量仅仅能保证在该方法执行过程中,得到正确结果,但是不保证程序代码的执行顺序。用volatile修饰后的变量,赋值后多执行了一个lock addl指令的操作,作用相当于一个内存屏障,使得指令重排序时不能把后面的指令重排序到内存屏障之前,从而阻止了指令重排序。

基于volatile变量的运算在并发下不一定是安全的。volatile变量在各个线程的工作内存,不存在一致性问题(各个线程的工作内存中volatile变量,每次使用前都要刷新到主内存)。但是Java里面的运算并非原子操作,导致volatile变量的运算在并发下一样是不安全的。

volatile对比Synchronized的异同:

  1. Synchronized既能保证可见性,又能保证原子性,而volatile只能保证可见性,无法保证原子性。
  2. volatile关键字是线程同步的轻量级实现,所以volatile性能肯定比synchronized关键字要好。但是volatile关键字只能用于变量而synchronized关键字可以修饰方法以及代码块。synchronized关键字在JavaSE1.6之后进行了主要包括为了减少获得锁和释放锁带来的性能消耗而引入的偏向锁和轻量级锁以及其它各种优化之后执行效率有了显著提升,实际开发中使用 synchronized关键字的场景还是更多一些。
  3. 多线程访问volatile关键字不会发生阻塞,而synchronized关键字可能会发生阻塞。
  4. volatile关键字主要用于解决变量在多个线程之间的可见性,而 synchronized关键字解决的是多个线程之间访问资源的同步性。

volatile与Synchronized的异同相关推荐

  1. volatile 和 synchronized 详解

    一.背景 提起并发编程,我们不得不说起 volatile 和 synchronized 这两个关键字,这两个关键字也是面试中常常被问到的,下面我们分别介绍一下这两个关键字以及二者的异同 首先我们先理解 ...

  2. 打工人,从 JMM 透析 volatile 与 synchronized 原理

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 在面试.并发编程.一些开源框架中总是会遇到 volatil ...

  3. JAVA多线程之volatile 与 synchronized 的比较

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 来源:hapjin cnblogs.com/hapjin/p/54 ...

  4. java中的volatile和synchronized

    参考:http://blog.csdn.net/wanghai__/article/details/6260178 这个可能是最好的对比volatile和synchronized作用的文章了.vola ...

  5. 多图 | 搞懂volatile和synchronized的区别

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源 | 公众号「日拱一兵」 之前写了几篇 Java并发 ...

  6. volatile、synchronized、(原子、可见、有序)、先行发生原则

    Java代码---编译--->Java字节码---类加载器加载到JVM中--->汇编指令(在CPU上执行) Java中的并发机制依赖于JVM的实现和CPU指令 1.volatile 轻量级 ...

  7. 【多线程学习笔记】sychronized关键字底层原理、sychronized与ReentrantLock、volatile和synchronized

    文章目录 sychronized释义 synchronized关键字最主要的三种使用方式: synchronized底层原理: 同步代码块: 同步方法 当前类的class对象作为锁 锁升级 Synch ...

  8. volatile与synchronized 同步原理基础讲解

    基本知识: 可见性: 可见性是一种复杂的属性,因为可见性中的错误总是会违背我们的直觉.通常,我们无法确保执行读操作的线程能适时地看到其他线程写入的值,有时甚至是根本不可能的事情.为了确保多个线程之间对 ...

  9. volatile和synchronized的区别与联系

    这个可能是最好的对比volatile和synchronized作用的文章了.volatile是一个变量修饰符,而synchronized是一个方法或块的修饰符.所以我们使用这两种关键字来指定三种简单的 ...

  10. Java 并发编程CAS、volatile、synchronized原理详解

    CAS(CompareAndSwap) 什么是CAS? 在Java中调用的是Unsafe的如下方法来CAS修改对象int属性的值(借助C来调用CPU底层指令实现的): /*** * @param o ...

最新文章

  1. 《笨办法学python》(《learn python the hard way 3thrd》)习题48(ex48)的代码实现
  2. SDN学习之旅-RYU笔记(1)
  3. 【学术相关】一院士给博士生的一封信:每天工作12小时,这仅是一个下限!...
  4. cad转shp 奥维_CAD转换工具程序包(附下载)
  5. S3C2440 WINCE6将USB DEVICE改成USB HOST,实现两个USB HOST
  6. cmd c语言 图形,CMD-C彩图隐写方案
  7. 常量表达式不允许函数调用_SQLite特殊索引之表达式索引
  8. 用java写一个if语句
  9. 图像识别---opencv安装
  10. linux下 使用apache2 ab 测试进行压力测试
  11. cad2019字体_这些是2019年最有效的简历字体
  12. hyper-V管理器构建win7虚拟机
  13. ORB-SLAM总结
  14. 开发流程与管理--《人月神话》精简
  15. android 点阵字库
  16. IE兼容模式文件上传所遇问题解决
  17. HTTP请求头及其作用
  18. 计算机桌面背景在哪里调整,电脑中怎么设置桌面背景
  19. 计算机画图如何把二寸照片修改为一寸,win7使用自带画图工具把照片调整成2寸的方法...
  20. c语言开发的cli,Package - cyy-cli

热门文章

  1. 安卓期末作品小项目_《去月球》电影版今年上映;电子竞技入选亚室会正式比赛项目...
  2. 李白打酒 c语言,C语言递归调用1:李白打酒
  3. Encoded password does not look like BCrypt的原因及解决办法
  4. 问题描述 the jar file jrt-fs.jar has no source attachment
  5. 单独使用bable插件
  6. shipyard中文版安装教程(附安装脚本)
  7. 手把手接入高德地图API——POI周边搜索功能实现
  8. 浅谈英语学习兴趣的培养
  9. lay-href页面不跳转
  10. 如何学会做一名优秀的下属