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

最新文章

  1. Qlikview List控件
  2. ubuntu 12.04禁用笔记本触摸板
  3. springmvc 注解 RequestParam/RequestHeader/CookieValue
  4. ASP.NET Web – 状态管理
  5. 用bash命令得到Windows一个目录下的所有文件并且把结果输入到一个文件
  6. [iOS] iOS系统中各种设置项的url链接
  7. UUID.randomUUID()方法介绍
  8. 关于Char* ,CString ,WCHAR*之间的转换问题
  9. 消费创富会开发模式系统App
  10. 总结两种动态代理jdk代理和cglib代理
  11. Linux的chkconfig命令详解
  12. Visual Studio Team Services 动手实验
  13. 2.02-request_header_two
  14. GRE tunnel 2
  15. ios下面的按钮和inout框
  16. WebView与 JS 交互方式
  17. windows下docker的安装并使用
  18. Unity CombineTexture
  19. 14.Android UiAutomator 图像处理
  20. 教你如何修改FireFox打开新标签页(NewTab Page)的行列数

热门文章

  1. CentOS7搭建Hadoop2.8.0集群及基础操作与测试
  2. 第一次写的MySQLHelper
  3. php object
  4. 美国知名Cloudflare网络公司遭中国顶尖黑客攻击
  5. AGC036C GP 2
  6. cmd优化
  7. Proto3语法翻译
  8. c#类的定义,c#中的关健字,C#标识符
  9. asp.net选择文件夹上传
  10. kibana使用日志时间进行排序