并发 · 单选题 · 第 14 题
Java 后端开发面试 · 第 14 题
关于 volatile 关键字,下列说法正确的是?
- A它保证可见性并禁止相关指令重排,但不保证 count++ 这类复合操作的原子性
- B它保证被修饰变量的所有操作都是原子的,count++ 不需要额外加锁
- C它和 synchronized 的作用完全相同,只是写法更简洁、运行时性能也更好一些
- D它只能用来修饰方法,表示该方法同一时刻只能被一个线程执行
答案
A A. 它保证可见性并禁止相关指令重排,但不保证 count++ 这类复合操作的原子性
解析
volatile 写会立即刷新到主内存,volatile 读会读最新值,并通过内存屏障禁止重排序,典型用途是状态标志和双重检查锁单例。count++ 包含读、加、写三步,多个线程交错执行仍会丢失更新,需要用 AtomicInteger 或加锁。volatile 只能修饰字段。