您的位置:首页 > 编程语言 > Java开发

Java中的volatile关键字

2009-02-21 22:43 288 查看
Java中volatile关键字原义是“不稳定、变化”的意思,那么在java语言中,volatile是什么意思呢?

volatile,在Java中用来修饰变量,那是为什么呢?volatile是告诉vm,这个变量不能被私自占有使用,下面就解释一下为什么这么说吧!

大家都知道,在java中,除了long和double的操作,对基本类型的操作是原子性的,那还为什么使用valotile关键字呢,因为随着jvm的优化和成熟,为了提高多线程的效率,允许每个线程在工作内存保存变量的拷贝进行操作,这就很容易出现数据不一致,所以volatile就强制是多核或多线程必须从主存中读写变量,保证变量的一致性。

由于比起synchronized,volatile关键字的覆盖范伟更小,只是修饰的变量,所以效率就比前者高,但是,它是存在问题的,不能保证“线程写的合理”,解释如下:

写的不合理,是可能存在竞争条件,而出现操作与设想结果不同。

假如,有100个线程正在对一个i变量惊醒i++操作,那么结果一定是100么,可能<100的,比如一个线程a读到的是i=3,几乎同时(a没有修改i),另一个线程也读到3,那么结果,两次相加就得到了i=4,而不是5,详细看看操作系统同步就知道了。

怎么处理呢?

1.使用synchronized关键字,但是这样就失去了volatile的意义。

2.使用CPU原语实现非阻塞算法。详情前看下篇。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: