码迷,mamicode.com
首页 > 编程语言 > 详细

多线程同步工具——volatile变量

时间:2016-12-30 07:35:33      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:nbsp   ret   步骤   读写   com   资料   oid   return   同步   

关于volatile,找了一堆资料看,看完后想找一个方法去做测试,测了很久,感觉跟没有一样。

这本书《深入理解Java内存模型》,对volatile描述中有这样一个比喻的说法,如下代码所示,对a的读写相当于对b的同步读写。

public volatile int a = 0;
private int b = 0;

public synchronized int getB(){
    return b;
}

public synchronized void setB(int b){
    this.b = b;
}

也就是说,volatile只保证了读与写的同步,每次读取都是得到最新值,每次写入都是覆盖最新值。

这就暗示着,非volatile变量的读写并非最新值,因为每个线程都有自己独立的内存保存着变量的副本,并非第一时间读取公共内存的变量。

现在,道理是明白的,接下来主要看它使用的场合和条件。

写入值不能依赖于读取值,例如a++,其实是一个“先读取,再运算,后写入”的步骤,存在了写入值依赖于读取值。

它除了读与写需要同步外,还需要其它操作的同步,那么其它操作的同步,无疑肯定要借助于synchronized。如果它的读与写的频率远远高于其它操作的同步,这时候就可以考滤volatile与synchronized的并用。

关于其它的用处,可以查看这篇文章正确使用 Volatile 变量》,今天我就先理解到这些了。

 

多线程同步工具——volatile变量

标签:nbsp   ret   步骤   读写   com   资料   oid   return   同步   

原文地址:http://www.cnblogs.com/hvicen/p/6235451.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!