04 volatile关键字实现原理

Posted lifeone

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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是通过加重量级锁将并行退化成串行,容易引起阻塞

以上是关于04 volatile关键字实现原理的主要内容,如果未能解决你的问题,请参考以下文章

Volatile关键字实现原理

volatile的原理和实现机制

Java中volatile关键字实现原理

synchronized和volatile关键字实现和底层原理详解

就是要你懂Java中volatile关键字实现原理

Volatile是用于解决什么问题,谈谈实现原理