volatile

前言

Java 线程安全

在之前提到:

通过引入并发来优化执行效率的同时引入了其他问题:

  • 对共享资源的处理无法保证原子性
  • 顺序问题 1. 处理器乱序执行指令在多线程下出问题,2. 多个线程需要顺序执行某个操作
  • 可见性 Java的内存模型(工作内存的出现引入了缓存,缓存导致数据的可见性出现问题)

volatile 的作用在于保持相关操作的顺序来实现可见性与有序性。

  • 保证可见性: 实现读写有序,在读数据之前一定将最新的当前当前数据在主内存刷新
  • 保证有序性: 是可见性的实现基础,即对读写有序的底层保障,不允许重排序,严格有序。

先行发生原则中 volatile的描述

在这里插入图片描述

保证可见性

变量修改对其他线程立即可见

可见性问题

https://www.pdai.tech/md/java/thread/java-thread-x-key-volatile.html#%E5%AE%9E%E7%8E%B0%E5%8F%AF%E8%A7%81%E6%80%A7

可见性问题主要指一个线程修改了共享变量值,而另一个线程却看不到。引起可见性问题的主要原因是每个线程拥有自己的一个高速缓存区——线程工作内存。volatile关键字能有效的解决这个问题,我们看下下面的例子,就可以知道其作用:

public class VolatileTest {
   
    int a = 1;
    int b = 2;

    public void change(){
   
        a = 3;
        b = a;
    }

    <
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值