Java线程:volatile关键字

Java线程:volatile关键字
 
Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单而且开销更低),并且其使用也更容易出错。
 
谈及到volatile关键字,不得不提的一篇文章是:《 Java 理论与实践: 正确使用 Volatile 变量》,这篇文章对volatile关键字的用法作了至关精辟的阐述。
 
之因此要单独提出volatile这个不经常使用的关键字缘由是这个关键字在高性能的多线程程序中也有很重要的用途,只是这个关键字用很差会出不少问题。
 
首先考虑一个问题,为何变量须要volatile来修饰呢?
要搞清楚这个问题,首先应该明白计算机内部都作什么了。好比作了一个i++操做,计算机内部作了三次处理:读取-修改-写入。
一样,对于一个long型数据,作了个赋值操做,在32系统下须要通过两步才能完成,先修改低32位,而后修改高32位。
 
假想一下,当将以上的操做放到一个多线程环境下操做时候,有可能出现的问题,是这些步骤执行了一部分,而另一个线程就已经引用了变量值,这样就致使了读取脏数据的问题。
 
经过这个设想,就不难理解volatile关键字了。
 
volatile能够用在任何变量前面,但不能用于final变量前面,由于final型的变量是禁止修改的。也不存在线程安全的问题。
 
更多的内容,请参看::《 Java 理论与实践: 正确使用 Volatile 变量》一文,写得很好。
相关文章
相关标签/搜索