volatile主要用在多个线程感知实例变量被更改了场合,从而使得各个线程获得最新的值。它强制线程每次从主内存中讲到变量,而不是从线程的私有内存中读取变量,从而保证了数据的可见性。
关于synchronized,可参考:JAVA多线程之Synchronized关键字--对象锁的特点
比较:
①volatile轻量级,只能修饰变量。synchronized重量级,还可修饰方法
②volatile只能保证数据的可见性,不能用来同步,因为多个线程并发访问volatile修饰的变量不会阻塞。
synchronized不仅保证可见性,而且还保证原子性,因为,只有获得了锁的线程才能进入临界区,从而保证临界区中的所有语句都全部执行。多个线程争抢synchronized锁对象时,会出现阻塞。
 
线程安全性
线程安全性包括两个方面,①可见性。②原子性。
从上面自增的例子中可以看出:仅仅使用volatile并不能保证线程安全性。而synchronized则可实现线程的安全性。

volatile与synchronized的区别相关推荐

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

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

  2. volatile和synchronized的区别与联系

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

  3. 并发编程-volatile和synchronized的区别

    1. 使用上的区别 Volatile只能修饰变量,synchronized只能修饰方法和语句块 2. 对原子性的保证 synchronized可以保证原子性,Volatile不能保证原子性 3. 对可 ...

  4. volatile和synchronized的区别

    1.volatile本质是在告诉jvm当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取:synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住. 2.vo ...

  5. volatile 和 synchronized的区别

    为什么80%的码农都做不了架构师?>>>    1.volatile本质是在告诉JVM当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取.synchronized则是锁定 ...

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

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

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

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

  8. zbb20180913 java thread volatile与synchronized区别

    volatile与synchronized区别 仅靠volatile不能保证线程的安全性.(原子性) ①volatile轻量级,只能修饰变量.synchronized重量级,还可修饰方法 ②volat ...

  9. volatile和synchronized有什么区别

    volatile和synchronized有什么区别 1.工作原理  · volatile本质上是在告诉JVM当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取.  · synchroni ...

最新文章

  1. win7如何配置access数据源
  2. 系统级性能分析工具perf的介绍与使用
  3. mysql存储过程调试学习总结
  4. 机器学习(K-means聚类原理以及用法)
  5. python测试开发django-8.windows系统安装mysql8教程
  6. [Python] 字符串大写变小写 lower()函数
  7. 服务器php 启动命令_php启动内置服务器
  8. hadoop商品推荐_北京尚学堂学员学习经验分享:商品推荐
  9. Linux面试常考(面经总结)
  10. 网络工程项目标书模板
  11. 阿里PEGASUS笔记:PEGASUS : Bridging Polynomial and Non-polynomial Evaluations in Homomorphic Encryption
  12. matlab图片客观评价,图像质量评价(一):IQA介绍
  13. 修改网站背景图html代码,网站首页顶部添加背景图片的修改代码
  14. 鲁迅朱安:留给世纪的背影_拔剑-浆糊的传说_新浪博客
  15. 电压源电流源电路符号及2B法
  16. netkeeper不能建立远程计算机连接,Netkeeper客户端常见问题集锦.doc
  17. pytorch 加权BCE_loss和加权CE_loss实现
  18. 互联网公司常用四大中间件 | 搜索中间件缓存中间件
  19. 自学3D游戏建模,90%的人都过不了这一关
  20. python模拟银行存取款_python 模拟银行转账功能过程详解

热门文章

  1. 计算机无法还原,降级为Windows 7的计算机无法引导至Windows 10恢复介质
  2. cv2 python3.5 linux,ubuntu 16.04 安装 opencv3.2.0 with python 3.5
  3. poj1743(后缀数组+二分--不可重叠最长重复子串)
  4. HTTP 2.0 协议
  5. 视音频编解码学习工程:H.264分析器
  6. 【Boost】boost库中thread多线程详解11——线程的休眠和中断
  7. instsrv.exe——来自Windows 2000 Resource Kits的一个小工具
  8. VC使用HTTP协议下载文件
  9. Linux 平台 C/C++ 代码中设置线程名
  10. 如何防止单例模式被JAVA反射攻击