外观
如何理解volatile、synchronized 与原子类?
标准回答
volatile提供特定读写的可见性和有序性保证,但复合操作如count++仍包含读改写,不会因此变成原子操作。synchronized提供互斥,并通过相同监视器上的解锁与后续加锁建立可见性关系。
AtomicInteger等适合单变量原子更新,CAS可能重试;多个字段需要保持业务不变量时,单独把每个字段都换原子类不一定正确。通常优先不可变结果和清晰所有权,必要时用短小临界区。
性能选择基于竞争和临界区内容。不要用“无锁永远快”或“synchronized一定重量级”概括所有情况。
追问与回答
volatile List能保证里面的所有操作线程安全吗
不能。volatile引用的读写语义不等于List内部结构及复合访问都安全,需要不可变快照、并发容器或同步。
参考资料
内容来源
- Android 与 AI 工程 Wiki · 原条目
q073