【高级java程序员应该知道的小知识】 volatile
来源:互联网 发布:印度人是黄种人吗 知乎 编辑:程序博客网 时间:2024/05/01 14:43
本篇态度: simple & stupid
volatile
用法:
private volatile Service.STATE state;
优点:
- 比其他的锁机制(synchronized、lock)简单;
- 不阻塞;
- 对volatile修饰的变量允许并发读.
谨记:
Java Memory Model ensures that all threads see a consistent value for the variable
volatile
提供变量修改后对其他线程的可见性。
变量被一个线程修改后,其他线程并发读到的变量值是一致的,仅保证此变量读和写的原子性。
- 但
volatile
修饰的共享变量不能作为多线程环境的计数器(i++
),计数器需要其它同步手段。
i++ 等价于 : //从内存获取i get(i);//(1) //i值加1 i = i + 1;//(2) //将i的值写回内存 set(i);//(3) 操作(1)、(2)、(3)串起来的执行路径不是原子性的.
final
不能与volatile
同时使用.
推荐使用场景:
读远比写多的时候,可以使用此关键字,同时给写方法加锁,来实现开销更小的读-写锁:
//使用voletile修饰state,提供跨线程的内存可见性(变量一致性)private volatile Service.STATE state;//读 - 不会阻塞,可并发读public Service.STATE getState() { return state; }//写 - 使用synchronized修饰以保证原子性public synchronized Service.STATE enterState(Service.STATE proposed) { Service.STATE oldState = state; state = proposed; return oldState;}
【版权所有@foreach_break 转载请注明出处 博客地址http://blog.csdn.net/gsky1986】
1 0
- 【高级java程序员应该知道的小知识】 volatile
- 【高级java程序员应该知道的小知识】 WeakHashMap
- 【高级java程序员应该知道的小知识】weak reference
- 优秀的 Java 程序员所应该知道的 Java 知识
- Java程序员也应该知道的一些网络知识
- Java程序员也应该知道的一些网络知识
- 程序员应该知道的计算机网络知识
- 每个程序员应该知道的计算机网络知识
- 程序员应该知道的计算机网络知识
- Java程序员也应该知道的系统知识系列之内存
- Java程序员都应该知道的福利
- JAVA程序员应该知道的linux命令
- JAVA程序员应该知道的linux命令
- Java程序员都应该知道的福利
- Java程序员应该掌握的Linux知识
- 前端程序员应该知道的 15 个 jQuery 小技巧
- 前端程序员应该知道的 15 个 jQuery 小技巧
- 前端程序员应该知道的 15 个 jQuery 小技巧
- 辛星浅析git init中的--bare选项,也就是裸仓库
- Android源代码 之 源代码分支、版本号、支持设备列表
- MyEclipse下载地址
- 欢迎使用CSDN-markdown编辑器
- [MySQL监控]MySQL监控配置模板及各监控项解释
- 【高级java程序员应该知道的小知识】 volatile
- JavaScript学习笔记之创建对象
- JavaScript学习笔记之继承
- Linux 共享库:LD_LIBRARY_PATH 与ld.so.conf
- 轻松互联网开发平台(Easy Do IT,原WebEasy)升级预告
- 西安
- 【高级java程序员应该知道的小知识】 WeakHashMap
- 【高级java程序员应该知道的小知识】weak reference
- android设置缺省的异常捕获器