volatile相关经典面试题
- 谈谈volatile的特性
- volatile的内存语义
- 说说并发编程的3大特性
- 什么是内存可见性,什么是指令重排序?
- volatile是如何解决java并发中可见性的问题
- volatile如何防止指令重排
- volatile可以解决原子性嘛?为什么?
- volatile底层的实现机制
- volatile和synchronized的区别?
谈谈volatile的特性
volatile的内存语义
- 当写一个 volatile 变量时,JMM 会把该线程对应的本地内存中的共享变量值刷新到主内存。
- 当读一个 volatile 变量时,JMM 会把该线程对应的本地内存置为无效。线程接下来将从主内存中读取共享变量。
说说并发编程的3大特性
- 原子性
- 可见性
- 有序性
什么是内存可见性,什么是指令重排序?
- 可见性就是指当一个线程修改了共享变量的值时,其他线程能够立即得知这个修改。
- 指令重排是指JVM在编译Java代码的时候,或者CPU在执行JVM字节码的时候,对现有的指令顺序进行重新排序。