作用:

一旦一个共享变量(类的成员变量、类的静态成员变量)被 volatile 修饰之后,那么就具备了两层语义:
1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。
2)禁止进行指令重排序。
volatile 本质是在告诉 jvm 当前变量在寄存器(工作内存)中的值是不确定的,需要从主存中读取;
synchronized 则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住。

区别:

1.volatile 仅能使用在变量级别;
synchronized 则可以使用在变量、方法、和类级别的;

2.volatile 仅能实现变量的修改可见性,并不能保证原子性;
synchronized 则可以保证变量的修改可见性和原子性;

3.volatile 不会造成线程的阻塞;
synchronized 可能会造成线程的阻塞;

4.volatile 标记的变量不会被编译器优化;
synchronized 标记的变量可以被编译器优化。

Synchronize和Lock 的区别与用法

synchronized 和 volatile 关键字的作用相关推荐

  1. 【说一千道一万】volatile关键字的作用和synchronized的关系

    [说一千道一万]volatile关键字的作用和synchronized的关系 volatile这个关键字在面试的时候通常会拿出来跟synchronized作比较,这也是比较基础的面试题目,这里自己总结 ...

  2. volatile关键字的作用、原理

    在只有双重检查锁,没有volatile的懒加载单例模式中,由于指令重排序的问题,我确实不会拿到两个不同的单例了,但我会拿到"半个"单例. 而发挥神奇作用的volatile,可以当之 ...

  3. 一文搞懂Volatile关键字的作用

    前言 Volatile关键字的作用主要有如下两个: 1.线程的可见性:当一个线程修改一个共享变量时,另外一个线程能读到这个修改的值. 2. 顺序一致性:禁止指令重排序. 一.线程可见性 我们先通过一个 ...

  4. Java中的synchronized与volatile关键字

    原文出处:http://hukai.me/android-training-course-in-chinese/performance/smp/index.html Java中的"synch ...

  5. 深入理解并发内存模型||JMM与内存屏障||多核并发缓存架构 ||JMM内存模型||volatile 关键字的作用 ||JMM 数据原子操作||JMM缓存不一致的问题

    深入理解并发内存模型||JMM与内存屏障 多核并发缓存架构 JMM内存模型 volatile 关键字的作用 JMM 数据原子操作 JMM缓存不一致的问题

  6. [实验]-从汇编代码来看volatile关键字的作用

    ★★★ 个人博客导读首页-点击此处 ★★★ 环境aarch64的交叉编译器 我们将C语言翻译成汇编代码,来看volatile关键字的作用 我们先看一段C语言代码 void udelay(uint64_ ...

  7. 24.volatile关键字的作用、volatile原理、可见性、内存屏障、volatile性能、transient

    24.volatile关键字的作用 24.1.volatile原理 24.2.可见性 24.3.内存屏障 24.4.volatile性能 25.transient 24.volatile关键字的作用 ...

  8. java volatile关键字的作用_java volatile关键字作用及使用场景详解

    1. volatile关键字的作用:保证了变量的可见性(visibility).被volatile关键字修饰的变量,如果值发生了变更,其他线程立马可见,避免出现脏读的现象.如以下代码片段,isShut ...

  9. 【003】【深入解析Java中volatile关键字的作用】

    为什么80%的码农都做不了架构师?>>> Java语言支持多线程,为了解决线程并发的问题,在语言内部引入了同步块synchronized和volatile关键字机制.在java线程并 ...

最新文章

  1. 关于自注意力机制的思考
  2. 中国机器人产业发展报告(2018)正式发布!
  3. NSCoding 的作用
  4. 推送改变世界!Push提高用户活跃度的三不原则
  5. JS输出范围内中所有质数
  6. [目标检测] Faster R-CNN 深入理解 改进方法汇总
  7. python爬虫模拟登录人人网
  8. c++创建虚拟串口_linux虚拟串口控制器驱动实现——适用于无开发板学习串口驱动...
  9. 2013全球移动游戏产业白皮书
  10. java可以使用python的库函数_java调用python方法总结
  11. 中国农业大学计算机研究生专业课,中国农业大学2019计算机考研纯干货分享
  12. 湖南电信拨号上网的某个记录资料
  13. 第 29 章 电阻触摸屏—触摸画板
  14. 以太镇火了,快卖掉手中的猫买楼吧
  15. 南阳理工ACM 题目73 比大小
  16. JS的DOM操作3--删除事件,注册事件与冒泡⭐⭐⭐(附带动图案例)
  17. c++中static变量的存储duration
  18. Yura2020年限量高级定制版阅读进度表
  19. zabbix监控mysql日志告警_zabbix监控mysql以及报警(二)终
  20. mySQL中stuff,SQL 中STUFF用法

热门文章

  1. 外包物料成本核算时的供应商确定
  2. SAP固定资产的几个关键日期
  3. php 规格,PHP 设计模式系列之 specification规格模式_PHP
  4. kong组件_Kong插件开发工具包
  5. image.helper.php,image.php
  6. BUUCTF (pwn) bjdctf_2020_YDSneedGrirlfriend(UAF)
  7. python中 5个带key内置函数
  8. Python找出列表中出现次数最多的元素三种方式
  9. python 定制类
  10. 王者荣耀连接不上服务器最新赛季排名,王者荣耀新赛季连掉三段 初期不能打排位是有原因的...