外观
volatile AtomicInteger 和 synchronized 分别适合什么场景?
标准回答
volatile 适合状态发布和可见性需求,例如工作线程读取退出标记,但不能让 count++ 这种读改写组合自动变成原子操作。AtomicInteger 通过原子操作支持单变量计数和状态更新,适合明确的原子读改写;如果业务要求同时修改多个字段并维护不变量,需要 synchronized 或其他整体同步策略。选择时我先看需要保证的是可见性、单操作原子性还是多步骤的一致性,避免因为用了一个 volatile 就认为对象整体线程安全。
延伸追问
给引用加 volatile 也不会自动让其指向的集合或对象内部字段全部线程安全。
内容来源
- Android Framework 知识手册 · 原条目
4-13