volatile解决Java内存可见性问题

在java的世界中存在的各种各样的关键字,就像其他的语言一样,这些关键字组成了这个丰富的java的世界。有很多关键字大家是比较的熟悉的,但是还有一些关键字,连作者自己都没有遇到过或者是遇到过也没有使用过。今天我们就来聊聊”volatile”.

java开发中有内存这个概念,我想大家没有不知道的吧,代码在虚拟机中执行是需要将code读到内存中的。

一个人的世界

如果这块儿内存空间是单个“人”用那还好办,很简单。我这里就假设内存就是一个房子,线程呢,就是人。当一个人的时候,我想在房子里做一些事情的时候,我只需要进房间,锁门,做事情,然后结束,离开房子,这中间的某一个环节,这个人会把自己的劳动成果上交给“仓库”验收。

两个或者多个人的世界

多个人自然会有多个房子,每个人进入自己的房子做事的流程跟上面的是一样的。但是,假如,王某做的事情和李某有交集,问题就来了。他们每个人其实都不是很熟悉,也不想打招呼的,也可以说是“老死不相往来”。所以,王某干脆就直接从“仓库”那里的李某的资源里找寻自己所需的资源。王某很厉害,一下子就找到了资源。王某兴高采烈地完成了自己工作,上报给了“仓库”,然后离开了屋子。但是,这个过程没有问题吗?你们觉得一定没有问题吗?肯定是有的,那就是王某从“仓库”里获取李某资源的时候,很有可能拿到的是王某之前的资源,并不是李某最新的资源,那么,这样王某用了李某过期的资源完成任务还能是正确的任务结果吗?自然是不正确的。因为王某对李某什么时候做完,什么时候更新“仓库”里的资源并不清楚,而且王某还不想开口问李某。这就难办了,这个问题在Java的世界里,被称为“内存可见性”。

内存可见性的问题

上文说了,王某由于无法知道李某更新资源的时机,因此会有可能导致问题的发生。那么应该如何解决呢?volatile!呼叫他就可以让问题迎刃而解,他的作用就像是一个监督员,每当王某要去拿李某的资源使用的时候,这个监督员就强制通知李某,你该更新你的“仓库”资源了哈,有人要用你的资源做点什么了!李某只能乖乖地照办,也不管谁要用他的资源,这样王某就成功且正确的拿到了李某正确的资源,顺利地完成了任务。

总之,volatile关键字就是在某线程和另外的线程在共享操作一个资源的时候,任何一方读取资源的时候,都会强制另外一方更新这个共享资源,以保证拿到的是最新的资源。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值