volatile关键字解析

本文深入解析Java中volatile关键字的两层核心语义:保证不同线程间变量操作的可见性及禁止指令重排序。通过具体实例阐述volatile如何确保多线程环境下数据的一致性和安全性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.volatile关键字的两层语义

  一旦一个共享变量(类的成员变量、类的静态成员变量)被volatile修饰之后,那么就具备了两层语义:

  1)保证了不同线程对这个变量进行操作时的可见性,即一个线程修改了某个变量的值,这新值对其他线程来说是立即可见的。

  2)禁止进行指令重排序。

2.我理解的voletile

      2.1 原子性:不保证原子性,只是保证从主内存读取的数据是最新的(如果多线程操作,会有线程安全问题;像自增操作不是原子性的,可能在读取数据之后线程1阻塞了,不能及时修改更新数据,后面的线程2读取的还是旧的数据,就算是后面线程2更改了数据,阻塞的线程1也不会更新数据,因为数据已经读到cpu了,而线程1缓存内存的数据会更新)

     2.2 可见性:数据被修改后,其他线程立即可见(即其他线程的缓存内存数据立刻更新)

     2.3 有序性:volatile之前的代码一定是在vaolatile执行前执行完毕,可以把volatile理解成分割层,volatile之后的不会跑到volatile之前执行

 

参考文章:http://www.cnblogs.com/dolphin0520/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值