线程安全考虑三个方面:原子性,可见性,有序性

为什么使用voliate关键字?

正常情况下编译器为了加快程序运行的速度,对一些变量的写操作会先在寄存器或者是CPU缓存上进行,最后才写入内存.而在这个过程,变量的新值对其他线程是不可见的.而volatile的作用就是使它修饰的变量的读写操作都必须在内存中进行!

  • voliate和synchronized区别
  • volatile本质是在告诉jvm当前变量在寄存器中的值是不确定的,需要从主存中读取,synchronized则是锁定当前变量,只有当前线程可以访问该变量,其他线程被阻塞住.
  • volatile仅能使用在变量级别,synchronized则可以使用在变量,方法.
  • volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized则可以保证变量的修改可见性和原子性.
  • volatile不会造成线程的阻塞,而synchronized可能会造成线程的阻塞.
  • volatile标记的变量不会被编译器优化,而synchronized标记的变量可以被编译器优化.

voliate和synchronized相关推荐

  1. 1、Java中“并发编程”详解【voliate、synchronized、JMM内存模型、原子类操作Atomic..、CAS原理】

    文章目录 1.对volatile 的理解? JMM(Java 内存模型) JMM模型的三大特性: 禁止指令排序 线程安全性保证 你在哪些地方用到过 volatile?单例 2.CAS 你知道吗?CAS ...

  2. 2018百度秋招一面/二面/三面

    1.int和integer所占字节,int .new integer.integer区别,大于128的时候有什么区别. int.integer所占字节为4字节. 1. int 和Integer在进行比 ...

  3. java voliate_Java之voliate, synchronized, AtomicInteger使用

    1: voliate 用在多线程,同步变量. 线程为了提高效率,将成员变量(如A)某拷贝了一份(如B),线程中对A的访问其实访问的是B.只在某些动作时才进行A和B的同步.因此存在A和B不一致的情况.v ...

  4. voliate Synchronized Lock

    参考文章:https://blog.csdn.net/huyiju/article/details/97126274 一.voliate相关 1:java内存模型 1.1:计算机的内存模型 在计算机的 ...

  5. java中变量 关键字_基于java的voliate关键字详解

    voliate关键字的作用: 一.内存可见性 基于缓存一致性协议,当用voliate关键字修饰的变量改动时,cpu会通知其他线程,缓存已被修改,需要更新缓存.这样每个线程都能获取到最新的变量值. 二. ...

  6. voliate解决重排序

    voliate关键字的两个作用 1. 保证变量的可见性:当一个被volatile关键字修饰的变量被一个线程修改的时候,其他线程可以立刻得到修改之后的结果.当一个线程向被volatile关键字修饰的变量 ...

  7. voliate工作实际应用场景

    哈喽大家好,我是IT老哥,今天我们来讲讲面试必问的voliate 单线程的情况下呢,我们肯定用不到这个voliate 只有在多线程的情景下才能用到,文章结尾我会举一个经典的案例 voliate三特性 ...

  8. 【java线程】锁机制:synchronized、Lock、Condition

    [Java线程]锁机制:synchronized.Lock.Condition 原创 2013年08月14日 17:15:55 标签:Java /多线程 74967 http://www.infoq. ...

  9. java static 可见性_Java多线程 synchronized与可见性的关系以及可见性问题总结

    作者:七里香的编程之路 出自:OSCHINA 原文:my.oschina.net/u/4098550/blog/4548274 能保证可见性的措施 除了volatile 可以让变量保证可见性外.hap ...

最新文章

  1. mysql的突然变成本地不能用密码,远程要用密码才能登录,这是神马情况???求解...
  2. Docker-tag
  3. tomcat(19)Manager应用程序的servlet类
  4. 【渝粤题库】广东开放大学 婚姻家庭法 形成性考核
  5. 求最小公倍数与最大公约数(C语言)
  6. Linux OPENSSL的简单用法
  7. 「代码随想录」62.不同路径【动态规划】详解!
  8. kvm+libvirt虚拟机快照浅析[转]
  9. H3CIE(WLAN)学习笔记(4)——PHY层协议
  10. module ‘cv2‘ has no attribute ‘face‘已安装仍报错解决
  11. 笔记本电脑当作服务器外置显示器,我们为什么要给笔记本外接显示器,真的是多此一举?...
  12. 创建达梦到Oracle的DBLINK(OCI方式)
  13. 微星 GL62M 7RD SSD+HDD双硬盘 安装双系统(win10+ubuntu 16.04)
  14. 2021下半年软考案例分析试题及答案解析
  15. 美国大学计算机科学专业排名2019,2019年美国大学计算机专业排名
  16. flutter 顶部状态栏透明
  17. vscode预览.mad文件
  18. 电信4g网速测试软件,移动联通电信三大运营商4G网速测试,仅供非专业人士参考...
  19. 无人帆船模拟及实船实验步骤
  20. DMIScope 1.00.005 注册版

热门文章

  1. EAS 服务器安装与环境配置
  2. echarts 世界地图标点_Echarts自定义实现标点地图
  3. 玄幻小说--仙界修仙
  4. 【 华为OD机试 2023】 查找充电设备组合/最接近最大输出功率的设备 (C++ Java JavaScript Python 100%)
  5. 别抱怨吃不到好吃的,教你几个小妙招
  6. Matlab求解规划问题之 fmincon函数
  7. DirectX 11游戏编程学习笔记之1: 开场白
  8. 随机性检测之游程总数测试
  9. A5论坛 - http://www.a5lt.com/
  10. golang获取一年前,一月前,一天前的时间