Volatile关键字!!!

volatile 的主要作用有两点:

  • 保证变量的内存可见性
  • 禁止指令重排序

这两点就是什么东西,他们涉及到了什么机制呢,我们来聊一聊

1.保证变量的内存可见性

其实这个要从JMM来说起,java的内存模型

Volatile关键字!!!

我们可以看到共享的变量都是存储在主内存当中的,每一个线程在用到共享变量的时候, 都会从主内存拿到变量放到线程工作内存中,类似一个缓存的东西当然不是缓存,之后下次操作这个变量的时候,直接从工作内存中拿到变量.

这种就会出现问题,如果线程B修改了值,并且丢到了主内存,但是线程A拿到的还是之前存储在工作内存中的值,就会出现问题

volatile这个关键字修饰的变量,就表示线程在操作这个变量的时候都会先去主内存,获取而不是直接在工作内存中获取,所以保证了可见性就是这个意思.

2.禁止指令重排

CPU在执行我们Java代码的时候看着是自上而下执行但是其实一些没有因果关系的操作

这两条指令的最终结果是一样的 都是给ab赋值
int a = 1;
int b = 2;

不一定a先被赋值,cpu的执行顺序是乱的,为了提升效率,两条指令都是赋值那么a如果赋值需要的时间长,那b其实也可以先被执行,是cpu为了提升效率的一种优化b里面需要用到a了管护逻辑性的操作了 那还是一个自上而下的执行

int a = 1;
int b = a +1;

禁止指令重排序就是禁止这种CPU的自动优化,简单了解下这个关键字就可以.

原文始发于微信公众号(闯sir9):Volatile关键字!!!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/20622.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!