协程进阶:同步 02. Volatile 的局限性

本篇解析 example-sync-02.kt。探讨为什么 @Volatile 无法解决并发累加问题。

1. 核心概念:Volatile 的作用

精 Java/Kotlin 中,@Volatile 关键字保证了变量的可见性(即一个线程修改了值,其他线程能立即看到最新值),但它不保证原子性

2. 为什么失败?

对于 counter++ 操作:

  1. 读取当前值。
  2. 计算新值(+1)。
  3. 写回新值。

虽然每个线程都能看到最新的 counter,但当两个线程同时读取了值(例如都是 10),它们都会计算出 11 并写回,导致一次加法丢失。

3. 开发者感悟

@Volatile 仅适用于“一个线程写,多个线程读”的标志位场景。在涉及多线程同时修改(读-写)同一个变量的场景下,它完全无能为力。不要被它的名字迷惑。

,