zoukankan      html  css  js  c++  java
  • 04 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是通过加重量级锁将并行退化成串行,容易引起阻塞
  • 相关阅读:
    [Err] 1168
    SpringAOP的运用方式——注解方式和XML配置方式
    展开运算符的理解
    find indexof findindex includes 的区别
    关于MVC MVVM的理解
    sync修饰符
    vue导航守卫
    输入网址到页面显示 经历了什么(转载)
    vue中侦听器的使用
    函数声明的三种方式
  • 原文地址:https://www.cnblogs.com/lifeone/p/11653133.html
Copyright © 2011-2022 走看看