Volatile 的使用场景及使用模式说明
来源:互联网 发布:淘宝原单尾货好的店铺 编辑:程序博客网 时间:2024/06/01 08:36
Volatile在一般的多线程编程里面算是比较尴尬的关键字,在java里面叫做"程度较轻的 synchronized
",不过一般在一些多线程的文章里面几乎不提到Volatile或者不建议使用这个关键字,毕竟这个关键字非常不好控制,干脆不用为好,我的看法是大多是时候么搞不清楚就不要用,(当然越不用就越生疏,呵呵),但是话说回来我对这个关键字实现高性能读写锁还是比较感兴趣的
首先总结一下Volatile的特性:可见性,但不互斥.怎么理解这句话,首先可见性的原因是以为,这个关键字可以让变量不缓存在寄存器里面,每次取值都是直接从主存里面获取,所以每次都是最新的值.但是不互斥是因为没有锁,这里有个改变值的流程(读取-修改-写入),这是一个比读更耗时的一个操作,在没有加锁的情况下别的线程读取这个值可能是任何一个时刻的值;所以根据这个特性可以推导出使用Volatile在少写多读的情况下,性能非常好,当然首先要保证不会是多线程同时写.
Volatile有五个使用场景(参考Brian Goetz (brian.goetz@sun.com)的文章):
1.作为状态标志
2.一次性安全发布
3.独立观察
4.volatile bean模式
5.开销较低的读写锁策略
具体内容可以拜读一下原文.地址:http://www.ibm.com/developerworks/cn/java/j-jtp06197.html
其中第五个还是值得推广应用一下的,其他的几种模式使用起来我个人觉得还是需要保持谨慎的,毕竟自己的代码还能保证变量不互斥,一旦是团队合作的话就很难保证了,因为你不可能跟团队的内一个人说这个是volatile的.
虽然基础,但是免得自己忘记了,记录一下.
- Volatile 的使用场景及使用模式说明
- java volatile关键字(及使用场景)
- volatile使用场景代码
- 【并发】java使用volatile的场景
- ArrayList,LinkedList使用场景及性能说明
- 正确使用 volatile 的模式
- Android 的四种启动模式及使用场景详解
- activity的四种启动模式及使用场景
- js prototype、__proto__的区别及使用场景及原型链的说明
- scope的使用场景和说明
- iOS 代理方法声明的两种形式:加号,减号,及使用场景说明
- Java并发编程:volatile关键字解析(五.使用volatile关键字的场景)
- C&C++中volatile使用场景
- 嵌入式开发中volatile关键词使用场景
- 关键字volatile的含义及使用
- 设计模式-单例模式及使用场景
- 策略模式使用场景
- 【转载】单例模式的使用场景
- 算法:一维最近对问题
- 《数据挖掘概念与技术》学习笔记
- 在64位Windows8系统下编写并调试汇编程序
- 字典转模型
- Freeglut 2.8.1 +VS2010配
- Volatile 的使用场景及使用模式说明
- SOJ 1119 Factstone Benchmark
- 允许ubuntu下mysql远程连接
- 初识 PS CS6(九)___用Alpha 通道保护图像
- 一些Python代码
- 使用Eclipse开发Android源码
- ackerman函数
- 西电人总结各it公司待遇
- UVa 1583 - Digit Generator