Java并发01基本原理02-volatile

一.作用

volatile保证共享变量的可见性。

二.原理

被volatile修饰的变量进行写操作的时候,其汇编代码会多出一条带Lock前缀的指令addl,这个Lock前缀指令在多核处理器下会引发两件事:

  1. 将当前处理器缓存行的数据写回到系统内存
  2. 这个写回操作使得在其他CPU里缓存了该内存地址的数据无效。

所以,当一个线程修改某个被volatile修饰的变量时,其他线程能够立即读到该变量的最新值,保证可见性。

三.优化

  1. LinkedTransferQueue这个类在使用volatile变量的时候,用追加的字节的方式来优化出队和入队。LinkedTransferQueue 用一个内部类来定义队列的头结点和尾节点,内部类PaddedAtomicReference追加了15个变量(共60字节),加上父类的value变量,一共64字节。
  2. 为什么追加字节可以优化呢?
    因为很多处理器的高速缓存行是64字节宽。当字节不足64的时候,处理器会将它们都读到同一个高速缓存行,所以如果两个volatile节点同时写操作就会相互锁住同一个缓存行。
  3. 以下可以不用这种方式:
    a.当处理器的高速缓存行不是64字节宽;
    b.Volatile变量写入没有那么频繁。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值