Java线程:volatile关键字

谈及到volatile关键字,不得不提的一篇文章是:《Java 理论与实践: 正确使用 Volatile 变量》,这篇文章对volatile关键字的用法做了相当精辟的阐述。

之所以要单独提出volatile这个不常用的关键字原因是这个关键字在高性能的多线程程序中也有很重要的用途,只是这个关键字用不好会出很多问题。

首先考虑一个问题,为什么变量需要volatile来修饰呢?

要搞清楚这个问题,首先应该明白计算机内部都做什么了。比如做了一个i++操作,计算机内部做了三次处理:读取-修改-写入。

同样,对于一个long型数据,做了个赋值操作,在32系统下需要经过两步才能完成,先修改低32位,然后修改高32位。

假想一下,当将以上的操作放到一个多线程环境下操作时候,有可能出现的问题,是这些步骤执行了一部分,而另外一个线程就已经引用了变量值,这样就导致了读取脏数据的问题。

通过这个设想,就不难理解volatile关键字了。

volatile可以用在任何变量前面,但不能用于final变量前面,因为final型的变量是禁止修改的。也不存在线程安全的问题。

更多的内容,请参看::《Java 理论与实践: 正确使用 Volatile 变量》一文,写得很好。

出处:http://lavasoft.blog.51cto.com/62575/222076

“人”的结构就是相互支撑,“众”人的事业需要每个人的参与。

Java线程:volatile关键字

相关文章:

你感兴趣的文章:

标签云: