加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

04 volatile关键字实现原理

发布时间:2020-12-15 07:25:48 所属栏目:Java 来源:网络整理
导读:volatile关键字实现原理 1、volatile关键字的语义分析 作用:让其他线程能够马上感知到某个线程多某个变量的修改 保证可见性 对共享变量的修改,其他线程能够马上感知到 保证有序性 在重排序时保证volatile修饰的代码位置不变 实现原理 对于volatile修饰的变

volatile关键字实现原理

1、volatile关键字的语义分析

作用:让其他线程能够马上感知到某个线程多某个变量的修改

  • 保证可见性

    对共享变量的修改,其他线程能够马上感知到
  • 保证有序性

    在重排序时保证volatile修饰的代码位置不变
  • 实现原理

    对于volatile修饰的变量会编译时会使用Lock指令,其他线程用到Lock指令修饰的变量时会从主存中直接获取

    2、 volatile的使用场景

  • 状态标志(开关模式)

    一个线程通过改变共享变量的值,来控制另一个现实的结束
  • 双重检查锁定(double-checked-locking) DCL

    懒汉式单例
  • 需要利用顺序性

3、volatile和synchronized的区别

  • 使用上

    volatile修饰变量,synchronized修饰方法和语句块
  • 对原子性的保证

    synchronized保证了原子性,volatile不能保证原子性
  • 可见性的保证

    都可以保证,但原理不同

    volatile对变量加lock,synchronized使用monitorEnter和monitorExit
  • 对有序性的保证 volatile禁止了重排序,保证了有序性 sychronized是通过加重量级锁将并行退化成串行,容易引起阻塞

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读