volatile相关经典面试题
- 谈谈volatile的特性
- volatile的内存语义
- 说说并发编程的3大特性
- 什么是内存可见性,什么是指令重排序?
- volatile是如何解决java并发中可见性的问题
- volatile如何防止指令重排
- volatile可以解决原子性嘛?为什么?
- volatile底层的实现机制
- volatile和synchronized的区别?
谈谈volatile的特性
volatile的内存语义
- 当写一个 volatile 变量时,JMM 会把该线程对应的本地内存中的共享变量值刷新到主内存。
- 当读一个 volatile 变量时,JMM 会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。
说说并发编程的3大特性
- 原子性
- 可见性
- 有序性
什么是内存可见性,什么是指令重排序?
- 可见性就是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改。
- 指令重排是指JVM在编译Java代码的时候,或者CPU在执行JVM字节码的时候,对现有的指令顺序进行重新排序。
volatile是如何解决java并发中可见性的问题
底层是通过内存屏障实现的哦,volatile能保证修饰的变量后,可以立即同步回主内存,每次使用前立即先从主内存刷新最新的值。
volatile如何防止指令重排
也是内存屏障哦,跟面试官讲下Java内存的保守策略:
- 在每个volatile写操作的前面插入一个StoreStore屏障。
- 在每个volatile写操作的后面插入一个StoreLoad屏障。
- 在每个volatile读操作的前面插入一个LoadLoad屏障。
- 在每个volatile读操作的后面插入一个LoadStore屏障。
最后在出来放一波福利吧!希望可以帮助到大家!
千千万万要记得:多刷题!!多刷题!!
之前算法是我的硬伤,后面硬啃了好长一段时间才补回来,算法才是程序员的灵魂!!!!
篇幅有限,以下只能截图分享部分的资源!!
(1)多线程(这里以多线程为代表,其实整理了一本JAVA核心架构笔记集)
(2)刷的算法题(还有左神的算法笔记)
(3)面经+真题解析+对应的相关笔记(很全面)
(4)视频学习(部分)
ps:当你觉得学不进或者累了的时候,视频是个不错的选择
其实以上我所分享的所有东西,有需要的话我这边可以免费分享给大家,但请一定记住获取方式:点击这里前往免费获取
,有需要的话我这边可以免费分享给大家,但请一定记住获取方式:点击这里前往免费获取
在这里,最后只一句话:祝大家offer拿到手软!!