Java 后端 · Java 并发
volatile 能保证什么?为什么 volatile 修饰的 i++ 仍然不安全?
先自己想一想,再看参考要点
参考要点
- volatile 保证可见性(写入对之后读取的线程立即可见)和有序性(volatile 写之前的读写不会被重排序到写之后,volatile 读之后的读写不会被重排序到读之前)
- 单次读写是原子的,long、double 也不会被拆成两次,但不保证 i++ 这类复合操作的原子性:i++ 是读取、加 1、写回三步,两个线程可能读到同一个旧值,各自加 1 后写回,只增加了 1
- 读-改-写操作要用锁或原子类
学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。