volatile对所有线程可见

Java中synchronized关键字可以保证变量的同步,Java还有一个稍弱的同步机制,即volatile变量。volatile用户确保将变量的更新操作同步通知到其它线程。

volatile变量具备两种特性:一种是保证该变量对所有线程可见,在一个线程修改了变量的值后,新的值对于其它线程时可以立即获取的;一种是volatile禁止指令重排,即volatile变量不会被缓存在寄存器或者其它处理器不可见的地方,因此在读取volatile类型的变量时总会返回最新写入的值。

对所有线程可见

因为在访问volatile变脸时不会执行加锁操作,也就不会执行线程阻塞,因此,volatile变量是一种比synchronized关键字更轻量级的同步机制。volatile主要适用于一个变量被多个线程共享,多个线程均可针对这个变量执行赋值或者读取的操作。

在有多个线程对普通变量进行读取时,每个线程都首先须要将数据从内存中复制变量到CPU缓存中,如果计算机有个多CPU,则线程可能都在不同的CPU中被处理,这意味着每个线程都须要将同一个数据复制到不同的CPU cache中,这样每个线程都针对同一个变量的数据做了不同的处理后就可能存在数据不一致的情况。多线程对普通变量读写流程见下图

多线程对普通变量读取流
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值