Java:volatile 关键字的一点理解
来源:互联网 发布:误清空回收站恢复软件 编辑:程序博客网 时间:2024/06/05 01:29
Java:volatile 关键字的一点理解
背景
学了六年C#,一直没有使用过 volatile,对多线程编程也是偶尔才会使用,这次学习 Java 又遇到了 volatile,准备稍微深入的了解一下。
volatile 的作用?
几乎所有支持这个关键字的语言给出的解释都一样:阻止编译器对字段访问和赋值的优化,直接从字段所在的空间取值(可能是值,也可能是引用),而非引入寄存器等优化措施(跟编译器的实现有关)。
使用 volatile 后对,字段的访问(this.field)和字段的赋值(this.filed = xxx)就是原子操作了,在多线程环境下,不需要使用 synchronized 进行访问,否则的话必须使用 synchronized 进行访问。
何时使用 volatile?
根据上文,我们很容易总结出一个规律:方法中只对字段就行了访问或赋值,volatile 和 synchronized可以结合使用,如下例:
1 public class Program { 2 static Object locked = new Object(); 3 static volatile int count; 4 5 public static void main(String[] args) { 6 // TODO Auto-generated method stub 7 8 9 }10 11 static int getCount() {12 return count;13 }14 15 static void resetCount() {16 count = 1;17 }18 19 static void increaseCount() {20 synchronized (locked) {21 count++;22 }23 }24 }
备注
本文没有深入到编译后的字节码级别进行探讨(也有可能是影响JIT),所以不一定对,有深入了解的朋友,还请留言批评。
0 0
- Java:volatile 关键字的一点理解
- 关于Volatile关键字的一点理解
- Java volatile 关键字理解
- java中volatile关键字的理解
- 关于Java中的关键字volatile的理解
- java中volatile关键字的理解
- volatile关键字的理解
- volatile关键字的理解
- volatile关键字的理解
- 理解java中的volatile关键字
- 理解 java volatile,transient关键字
- 深入理解Java-Volatile关键字
- java:深入理解volatile关键字
- java的关键字volatile
- java volatile的关键字
- 对volatile关键字的理解
- volatile关键字的初步理解
- 对volatile关键字的理解
- 最近遇到的若干Web前端问题:disable和readonly,JqueryEasyUI,KindEditor
- 二叉树的四种遍历
- Android 手势&触摸事件
- 笔记-计算机网络-传输层作用
- Java 8 的新特性和改进总览
- Java:volatile 关键字的一点理解
- ——黑马程序员——OC中数据的封装
- 用顺序队列实现的舞会舞伴选择问题
- 高可用可伸缩架构实用经验谈
- 记忆方法(一)概述
- Java环境变量配置
- 命令行乱码处理
- hdu 3501 欧拉函数
- JAVA自定义序列化的神奇方法