volatile功能与原理

功能:

volatile提供了稍弱的同步机制。被volatile修饰的变量可确保将变量的更新及时通知到其他线程。

编译器不会针对volatile修改的变量与其他变量内存重排序。

valatile不会缓存到寄存器。

访问volatile不会执行加锁操作。

使用

volatile最亮眼的是它的可见性。

从内存可见性角度看:读取volatile相当于进入同步代码、写入volatile变量相当于退出同步代码区

volatile boolean asleep;
while(!asleep)
    ...

这个是volatile的典型应用模式。

volatile只是确保变量的可见性,不足以操作的原子性,例如volatile int i=0; i++;

同步机制既可以确保共享变量的可见性、也可以确保原子性

volatile使用情形条件:

1、对变量写入操作不依赖当前变量的值,或确保只有单个线程操作变量

2、该变量不与其他状态变量一起纳入不变性条件

3、访问变量时不需要加锁。

原理

volatile修饰的变量在操作之前会引发缓存锁定:

1、将当前处理器缓存回写到系统的内存中

2、回写内存导致其他CPU里的缓存无效。

缓存锁定确保缓存一致性,会阻止同时修改有两个以上的cpu缓存的内存数据。

你可能感兴趣的:(java并发编程)