- 0
- 0
- 约7千字
- 约 25页
- 2022-03-03 发布于浙江
- 举报
?
?
25张图带你深入了解java并发的volatile关键字的底层设计原理
?
?
引子
小艾吃饭路上碰上小牛,忙问:你昨天面大厂面的咋样了?听说他们最喜欢问多线程相关知识。
小牛说:对啊,第一个问题我就讲了20分钟,直接把面试官讲服了。
小艾忙问:什么问题能讲这么久?是不是问你情感经历了?
小牛说:…问的volatile关键字。
小艾说:volatile关键词的作用一般有如下两个:
可见性:当一个线程修改了由volatile关键字修饰的变量的值时,其它线程能够立即得知这个修改。
有序性:禁止编译器关于操作volatile关键词修饰的变量的指令重排序。
你说这两个说了20分钟?口吃?
小牛说:你知道volatile的实现原理吗?
小艾说:缓存一致性协议嘛,这有啥?
小牛说:既然硬件保证了缓存一致性协议,无论该变量是否被volatile关键词修饰,它都该满足缓存一致性协议呀。你这说的有点自相矛盾哦。
小艾说:那volatile的实现原理是什么?
小牛说:且听我慢慢道来。
缓存一致性协议
我们知道,现代CPU都是多核处理器。由于cpu核心(Kernel)读取内存数据较慢,于是就有了缓存的概念。我们希望针对频繁读写的某个内存变量,提升本核心的访问速率。因此我们会给每个核心设计缓存区(Cache),缓存该变量。由于缓存硬件的读写速度比内存快,所以通过这种方式可以提升变量访问速度
原创力文档

文档评论(0)