为什么在多核多线程程序中要慎用volatile关键字

 我来答
流星一道虹
2015-08-12 · TA获得超过169个赞
知道小有建树答主
回答量:81
采纳率:0%
帮助的人:78.1万
展开全部
  因为volatile并不能保证其原子性,他只保证了某一个线程对他修改以后其他线程可见,
  尤其是当多个线程对一个变量自增活自减时会导致变量出错。

  参照《深入理解java虚拟机》一书,volatile运用在以下场景:
  1>运算结果并不依赖变量的当前值,或者能够确保只有单一的线程修改变量的值。
  2>变量不需要与其他的状态变量共同参与不变约束(表示看不懂这句)。

  因此,在使用volatile关键字时要慎重,并不是只要简单类型变量使用volatile修饰,对这个变量的所有操作都是原来操作,当变量的值由自身的 上一个决定时,如n=n+1、n++等,volatile关键字将失效,只有当变量的值和自身上一个值无关时对该变量的操作才是原子级别的,如n = m+1,这个就是原级别的。所以在使用volatile关键时一定要谨慎,如果自己没有把握,可以使用synchronized来代替volatile。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式