Volatile的前世今生
2016-05-03 22:33
211 查看
在Java 5之前,它是一个备受争议的关键字,因为在程序中使用它往往会导致出人意料的结果。在Java 5之后,volatile关键字才得以重获生机。
在JAVA5之前虽然Volatile不允许volatile变量之间重排序,但是却允许volatile和不同变量重排序,这就导致了很多出人意料结果。而java5之后volatile变量和不同变量之间也不允许重排序才使得,各种意料结果得到解决。如下图在java5之前使用Volatile会导致错误
class test
{
int a = 0;
volatile boolean flag = false;
线程:A
public void writer()
{
a = 1; // 1
flag = true; // 2
}
线程:B
public void reader()
{
if (flag)
// 3
{
int i = a; // 4
……
}
}
}
在JAVA5之前虽然Volatile不允许volatile变量之间重排序,但是却允许volatile和不同变量重排序,这就导致了很多出人意料结果。而java5之后volatile变量和不同变量之间也不允许重排序才使得,各种意料结果得到解决。如下图在java5之前使用Volatile会导致错误
class test
{
int a = 0;
volatile boolean flag = false;
线程:A
public void writer()
{
a = 1; // 1
flag = true; // 2
}
线程:B
public void reader()
{
if (flag)
// 3
{
int i = a; // 4
……
}
}
}
相关文章推荐
- Chapter 1 C#语言基础
- 知识梳理:Android子线程中更新UI的3种方法
- openerp支付宝当面支付(扫条码)
- python 2.x和3.x关于 'module' object has no attribute 'open'的解决办法
- python 2.x和3.x关于 'module' object has no attribute 'open'的解决办法
- Nodejs学习item 2 -- events事件处理EventEmitter
- 机器人学 —— 机器人视觉(特征)
- js刷新当前页面
- spring security
- 剑指offer之编程(七)
- 操作系统引论--操作系统的目标和作用
- Ubuntu使用vdbench批量创建目录和文件
- Qt之二维绘图
- android数据存储之sharedPreferences记住密码完成跳转
- 第9周深复制体验1
- 如何正确获得Android内外SD卡路径
- 第1章 概念和工具
- 使用 iOS 8 Spring Animation API 创建动画
- Spring RPC 入门学习(3)-插入Student对象
- 关于js中window.location.href,location.href,parent.location.href,top.location.href用法