码迷,mamicode.com
首页 > 其他好文 > 详细

04 volatile关键字实现原理

时间:2019-10-11 12:19:31      阅读:86      评论:0      收藏:0      [点我收藏+]

标签:修改   exit   状态   的区别   dcl   有序   串行   区别   原子性   

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是通过加重量级锁将并行退化成串行,容易引起阻塞

04 volatile关键字实现原理

标签:修改   exit   状态   的区别   dcl   有序   串行   区别   原子性   

原文地址:https://www.cnblogs.com/lifeone/p/11653133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!