文档章节

java并发-volatile关键字

 万山红遍
发布于 06/13 19:00
字数 522
阅读 41
收藏 2

说volatile的时候,必须先说一说,java的内存模型。

当一个线程操作共享变量时, 它首先从主内存复制共享变量到自己的工作内存 , 然后对工作内存里的变量进行处理,处理完后将变量值更新到主内存。

上面只是一个抽象的概念,真实的情况如下图。

线程1要使用共享变量count,从L1缓存中取,发现没有从L2缓存中取,也没有,接着从主内存中取。取到了值count=0,并把变量缓存到两级缓存。

这时线程2修改count的值, 首先会从L1缓存中取,发现没有,从L2缓存中取,缓存命中。然后修改count=1,更新线程2的L1 Cache 和 L2 Cache,最后更新主内存中的值为1. 

这时候线程1要修改count =1,获取线程1里的L1 cahce,取得count=0。明明线程2已经修改count为1,线程1获取到的值确还是缓存里的值0。这 就是共享变量的内存不可见问题。

volatile就可以解决这个可见性的问题,可以猜想一下它是怎么做到的?

对于volatile的变量,我不写缓存,直接写到主内存,读的时候,我直接从主内存读取。

当 一个变量被声明为 volatile 时,线程在写入变量时不会把值缓存在寄存器或者其他地方,而是会把值刷新回主内存 。 当其他线程读取该共享变量时 ,会从主内存重新获取最新值,而不是使用当前线程的工作内存中的值。
 

 

© 著作权归作者所有

下一篇: java8新特性
粉丝 1
博文 64
码字总数 103266
作品 0
杨浦
私信 提问
深入理解Java中的volatile关键字

本文就围绕volatile展开,主要介绍volatile的用法、volatile的原理,以及volatile是如何提供可见性和有序性保障的等。 volatile这个关键字,不仅仅在Java语言中有,在很多语言中都有的,而且...

Mr_zebra
2018/10/31
0
0
java中的synchronized与volatile

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题...

Taisuke
2014/03/04
0
1
再有人问你volatile是什么,就把这篇文章发给他

Java语言为了解决并发编程中存在的原子性、可见性和有序性问题,提供了一系列和并发处理相关的关键字,比如synchronized、volatile、final、concurren包等。在前一篇文章中,我们也介绍了syn...

Java小铺
2018/08/13
0
0
java中volatile关键字的含义

在java线程并发处理中,有一个关键字volatile的使用目前存在很大的混淆,以为使用这个关键字,在进行多线程并发处理的时候就可以万事大吉。 Java语言是支持多线程的,为了解决线程并发的问题...

Mr&Cheng
2013/02/23
0
1
Java并发编程笔记2-线程可见性&线程封闭&指令重排序

一.指令重排序 例子如下: public class Visibility1 { } public class ReaderThread extends Thread { } public class Test1 { } 多次运行结果分别如下: 可以看到多次运行所得到三种结果,...

狂小白
2018/03/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

局域网能互相ping通,ubuntu虚拟机不能上外网

【问题】 桥接模式老是无法上网,查看本机IP发现被分配了一个私网地址,猜测应该是虚拟DHCP服务器没有打开,于是查看Ubuntu的网络配置: /etc/network/interfaces 发现没有dhcp配置的信息,只...

tahiti_aa
13分钟前
0
0
以太坊助记词PHP开发包简介

以太坊助记词PHP开发包用来为PHP以太坊应用增加助记词和层级确定密钥支持能力。下载地址:以太坊助记词php开发包 。 1、开发包概述 以太坊助记词PHP开发包主要包括以下特性: 生成符合BIP39...

汇智网教程
昨天
1
0
系统监控-分布式调用链Skywalking

1. 为什么要使用分布式调用链技术? 随着公司业务的高速发展,公司服务之间的调用关系愈加复杂,如何理清并跟踪它们之间的调用关系就显的比较关键。线上每一个请求会经过多个业务系统,并产生...

秋日芒草
昨天
2
0
告诉自己的一些建议

摆脱学生心态 尽快发挥自己价值,让公司感知自己的存在,才是王道 选择比努力重要 自己附着的平台的经济体要是一个快速崛起的行业 转行趁早,年龄越大选择成本越高 趁早大量试错,学习新领域...

林怡丰
昨天
1
0
Windows下安装Redis

下载地址: 3.0老版已不维护更新:https://github.com/MicrosoftArchive/redis/releases 4.0版 https://github.com/tporadowski/redis/releases 中文官网:http://www.redis.net.cn/ https:......

Aeroever
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部