volatile
2016-04-04 11:28
141 查看
*****线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。 volatile的特性 当我们声明共享变量为volatile后,对这个变量的读/写将会很特别。理解volatile特性的一个好方法是:把对volatile变量的单个读/写,看成是使用同一个监视器锁对这些单个读/写操作做了同步。下面我们通过具体的示例来说明,请看下面的示例代码: class VolatileFeaturesExample { volatile long vl = 0L; //使用volatile声明64位的long型变量 public void set(long l) { vl = l; //单个volatile变量的写 } public void getAndIncrement () { vl++; //复合(多个)volatile变量的读/写 } public long get() { return vl; //单个volatile变量的读 } } 假设有多个线程分别调用上面程序的三个方法,这个程序在语意上和下面程序等价: class VolatileFeaturesExample { long vl = 0L; // 64位的long型普通变量 public synchronized void set(long l) { //对单个的普通 变量的写用同一个监视器同步 vl = l; } public void getAndIncrement () { //普通方法调用 long temp = get(); //调用已同步的读方法 temp += 1L; //普通写操作 set(temp); //调用已同步的写方法 } public synchronized long get() { //对单个的普通变量的读用同一个监视器同步 return vl; }
线程A写一个volatile变量,随后线程B读这个volatile变量,这个过程实质上是线程A通过主内存向线程B发送消息。
![](http://cdn1.infoqstatic.com/statics_s1_20160329-0306/resource/articles/java-memory-model-4/zh/resources/3.png)
相关文章推荐
- Tiny4412 开发板 编译环境搭建
- Building Telephony Systems With OpenSIPS---Introduction to SIP
- DOS命令详解
- Java安全通信:HTTPS与SSL
- 剑指offer-面试题28:字符串的排列
- x86汇编--(五)定位内存+栈的巧妙应用 温故知新
- hdu 1030 Delta-wave
- 改变表单的提交方法
- Entity Framework 学习笔记(2)
- 文章标题
- 一个简单的SignalR例子
- 抽象类和接口的区别
- JAVA如何将ip字符串转化为整型的工具方法
- 【BZOJ 1877】【SDOI 2009】晨跑
- nginx反向代理substitutions4nginx模块实现替换字符盗站 nginx.conf配置
- 修改商品详细页-销售记录-买家名称和显示字数
- 在项目中使用mybatis
- Java数据库连接——JDBC调用存储过程,事务管理和高级应用
- 4月3日腾讯笔试题“最长回文子串”PS
- 5、Mysql普通索引创建实例