Skip to content
阅读进度

volatile、synchronized、原子类有什么区别? ​

返回 Java 与并发 目录

标准回答 ​

volatile 提供相应的可见性和有序性保证,但不把复合操作变成原子操作;synchronized 用锁保护临界区;原子类适合单个变量的原子更新等场景。

关键机制 ​

  • count++ 包含读、加、写,volatile count 仍可能丢更新;可以用锁或 AtomicInteger.incrementAndGet。
  • 同一把锁建立互斥和可见性关系;必须确认参与保护的数据都遵守相同锁规则。
  • 多个字段需要共同满足不变量时,通常需要一致的锁或不可变状态快照,不能只把每个字段都换成原子类。

通俗例子 ​

余额减少和库存减少必须一起成立,两个 AtomicInteger 只能分别原子变化,不能自动保证“要么都完成,要么都不完成”。

易混淆点 ​

volatile 不是“每次强制从物理内存读取”的完整解释。应从 Java 内存模型的 happens-before 关系理解。

参考资料 ​

内容来源 ​

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