CS-Notes 学习笔记
Java 后端 · Java 并发

volatile 能保证什么?为什么 volatile 修饰的 i++ 仍然不安全?

先自己想一想,再看参考要点

参考要点

  • volatile 保证可见性(写入对之后读取的线程立即可见)和有序性(volatile 写之前的读写不会被重排序到写之后,volatile 读之后的读写不会被重排序到读之前)
  • 单次读写是原子的,long、double 也不会被拆成两次,但不保证 i++ 这类复合操作的原子性:i++ 是读取、加 1、写回三步,两个线程可能读到同一个旧值,各自加 1 后写回,只增加了 1
  • 读-改-写操作要用锁或原子类
在学习站中自测这道题看这道题所在的一天

学习站:先用面试题自评定级,按水平和面试日期排出每天的计划,自评过的题按间隔复习。免费、无需注册,记录只保存在自己的浏览器中。