【开发实战】彻底给你讲清楚 volatile关键字

👉博主介绍: 博主从事应用安全和大数据领域,有8年研发经验,5年面试官经验,Java技术专家,WEB架构师,阿里云专家博主,华为云云享专家,51CTO 专家博主

⛪️ 个人社区:个人社区
💞 个人主页:个人主页
🙉 专栏地址: ✅ Java 中级
🙉八股文专题:剑指大厂,手撕 Java 八股文

在这里插入图片描述

1. 什么是 volatile 关键字?

volatile 是 Java 中的一个关键字,用于修饰变量,确保变量的可见性和禁止某些编译器和处理器的优化。volatile 变量的主要作用是确保多线程环境下的变量可见性和有序性。

  1. 可见性:当一个线程修改了 volatile 变量的值,其他线程可以立即看到这个变化。
  2. 有序性volatile 变量的写操作不会被重排序到其前面的读操作之前,读操作也不会被重排序到其后面的写操作之后。

2. volatile 关键字底层原理

volatile 关键字的底层原理主要涉及到内存模型和硬件指令。

内存模型:

Java 内存模型(Java Memory Model, JMM)定义了多线程环境下的内存可见性和有序性规则。volatile 变量的读写操作会直接与主内存进行交互,而不是线程的工作内存。

  1. 写操作

    • 当一个线程写入一个 volatile 变量时,JMM 会确保在此之前对该变量的所有读写操作都已完成,并且结果已经刷新到主内存。
    • 写操作完成后,其他线程可以看到最新的值。
  2. 读操作

    • 当一个线程读取一个 volatile 变量时,JMM 会确保在此之后对该变量的所有读写操作都不会被重排序到此读操作之前。
    • 读操作会从主内存中读取最新的值,而不是线程的工作内存。
硬件指令:

volatile 变量的读写操作通常会生成特定的内存屏障(Memory Barrier)指令,确保内存操作的顺序性。

  1. LoadStore 屏障:在读取 volatile 变量之前插入,确保之前的读操作不会被重排序到此读操作之后。
  2. StoreStore 屏障:在写入 volatile 变量之后插入,确保之后的写操作不会被重排序到此写操作之前。
  3. StoreLoad 屏障:在写入 volatile 变量之后插入,确保之后的读操作不会被重排序到此写操作之前。

3. volatile 的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

激流丶

感觉小弟写的不错,给点鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值