Skip to content
阅读进度

volatile AtomicInteger 和 synchronized 分别适合什么场景? ​

返回 Java 与并发 目录

标准回答 ​

volatile 适合状态发布和可见性需求,例如工作线程读取退出标记,但不能让 count++ 这种读改写组合自动变成原子操作。AtomicInteger 通过原子操作支持单变量计数和状态更新,适合明确的原子读改写;如果业务要求同时修改多个字段并维护不变量,需要 synchronized 或其他整体同步策略。选择时我先看需要保证的是可见性、单操作原子性还是多步骤的一致性,避免因为用了一个 volatile 就认为对象整体线程安全。

延伸追问 ​

给引用加 volatile 也不会自动让其指向的集合或对象内部字段全部线程安全。

内容来源 ​

用完整回答理解机制,用真实证据解释项目。