Skip to content
阅读进度

如何理解volatile、synchronized 与原子类? ​

返回 Java 与并发 目录

标准回答 ​

volatile提供特定读写的可见性和有序性保证,但复合操作如count++仍包含读改写,不会因此变成原子操作。synchronized提供互斥,并通过相同监视器上的解锁与后续加锁建立可见性关系。

AtomicInteger等适合单变量原子更新,CAS可能重试;多个字段需要保持业务不变量时,单独把每个字段都换原子类不一定正确。通常优先不可变结果和清晰所有权,必要时用短小临界区。

性能选择基于竞争和临界区内容。不要用“无锁永远快”或“synchronized一定重量级”概括所有情况。

追问与回答 ​

volatile List能保证里面的所有操作线程安全吗 ​

不能。volatile引用的读写语义不等于List内部结构及复合访问都安全,需要不可变快照、并发容器或同步。

参考资料 ​

内容来源 ​

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