04 volatile关键字实现原理

匿名 (未验证) 提交于 2019-12-03 00:14:01

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

  • 保证可见性

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

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

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

  • 状态标志(开关模式)

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

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

  • 使用上

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

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

    都可以保证,但原理不同

    volatile对变量加lock,synchronized使用monitorEnter和monitorExit
  • 对有序性的保证
    volatile禁止了重排序,保证了有序性

    sychronized是通过加重量级锁将并行退化成串行,容易引起阻塞
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!