Java并发编程札记-(一)基础-07volatile详解

volatile同synchronized一样,是Java中实现线程安全的一种机制。与synchronized相比,特点是使用简单、性能高,但容易出错、使用范围有限。

《Java语言规范(第三版)》中讲到: Java允许线程访问共享变量,为了确保共享变量能被准确和一致的更新,线程应该确保通过排他锁单独获得这个变量。Java提供了volatile,在某些情况下比锁更加方便。如果一个字段被声明成volatile,Java线程内存模型确保所有线程看到这个变量的值是一致的。

Java中的volatile可以看做是“轻量级的synchronized”。synchronized可能会引起上下文切换和线程调度,同时保证可见性、有序性和原子性。volatile不会引起上下文切换和线程调度,但仅提供可见性和有序性保证,不提供原子性保证。

目录:

  1. 相关概念
  2. synchronized锁与volatile变量的比较
  3. volatile的使用场景
相关概念

上文中提到,volatile保证可见性和有序性,不保证原子性。这里有几个概念需要了解下。

原子操作与原子性
如果一系列(或者一个)操作是不可中断的,要么都执行,要么不执行,就称操作是原子操作,具有原子性。
拿移动支付举例,A用户向B用户付款100元,其中包含两个操作:A用户账户扣减100元,B用户账户增加100元。如果这两个操作不是原子操作就可能会出错,比如A账户账户扣减100元,但B用户账户并没有增加100元。

可见性
可见性指的是多个线程对共享资源的可见性。当一个线程修改了某一资源,其他线程能够看到修改结果。

有序性
有效性指程序按照代码的先后顺序执行。

synchronized锁与volatile变量的比较
  • volatile变量最大的优点是使用方便。在某些情形下,使用volatile变量要比使用相应的synchronized锁简单得多。
  • 某些情况下,volatile变量同步机制的性能要优于synchronized锁。
  • volatile变量不会像synchronized锁一样造成阻塞。
  • volatile变量最大的缺点在于使用范围有限,而且容易出错。

总的来说volatile变量使用范围有限,不能替代synchronized,但在某些场景下,使用volatile更好。

volatile的使用场景

关于volatile的使用场景推荐阅读正确使用 Volatile 变量一文。

volatile还是比较难理解的,本文只是简单地做了介绍,以后随着理解的加深会继续完善本文。
本文暂时就讲到这里,想了解Java并发编程更多内容请参考:

待完善。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值