volatile到底是什么?

描述

volatile是java虚拟机提供的一种轻量级同步机制

特征

  1. 保证可见性
  2. 禁重排序
  3. 不保证原子性,即不保证并发中的安全性

如何保证可见性

回忆java内存模型的基本知识

java执行的时候分为主内存和工作内存
线程执行的时候读取的是工作内存中的数据
工作内存中的数据是由主内存中读取的

模型图

java内存模型

执行流程描述

线程1创建的时候从主内存(共享)中拉取data=0数据副本存放到工作内存中,线程2创建和线程1一致。当前大家可以看到线程1和线程2都将data = 0 这个数据拉取到各自的运行内存中

目前遇到一种情况,线程1把data数据更新为1,如图
在这里插入图片描述
而线程2中data=0,这就导致了并发编程中的可见性问题,即线程1和线程2虽操作同一个对象data,但对对方的修改是看不到的,看到的一直都是运行内存中的data副本的值。

volatile是如何保证可见性的

代码中使用
/**
 * The synchronization state.
 */
private volatile int state;
作用流程

1.线程1中修改data=1,立即强制刷新回主内存中
2.强制过期其他工作线程中data的缓存
3.其他工作线程再次读取data则会从主内存中读取
volatile作用流程

参考资料:大白话聊聊Java并发面试问题之volatile到底是什么?【石杉的架构笔记】.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值