04 volatile关键字实现原理
2024-10-05 09:35:25
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是通过加重量级锁将并行退化成串行,容易引起阻塞
最新文章
- Qlikview List控件
- ubuntu 12.04禁用笔记本触摸板
- springmvc 注解 RequestParam/RequestHeader/CookieValue
- ASP.NET Web – 状态管理
- 用bash命令得到Windows一个目录下的所有文件并且把结果输入到一个文件
- [iOS] iOS系统中各种设置项的url链接
- UUID.randomUUID()方法介绍
- 关于Char* ,CString ,WCHAR*之间的转换问题
- 消费创富会开发模式系统App
- 总结两种动态代理jdk代理和cglib代理
- Linux的chkconfig命令详解
- Visual Studio Team Services 动手实验
- 2.02-request_header_two
- GRE tunnel 2
- ios下面的按钮和inout框
- WebView与 JS 交互方式
- windows下docker的安装并使用
- Unity CombineTexture
- 14.Android UiAutomator 图像处理
- 教你如何修改FireFox打开新标签页(NewTab Page)的行列数