理解线程同步,不要一上来就背一堆 API,先抓住它到底在解决什么问题:原子性、可见性和有序性。
第一件事:原子性
原子性是指一组操作要么整体完成,要么整体不被打断。像 synchronized、ReentrantLock 这种互斥手段,主要就是为了解决多个线程同时修改共享资源的问题。
第二件事:可见性
一个线程改了变量,别的线程什么时候能看到,不是理所当然的。volatile 能保证读到的是较新的值,也能约束部分重排序,但它不负责复合操作的原子性。
第三件事:有序性
为了优化执行效率,编译器和 CPU 可能调整指令顺序。同步机制除了互斥,还承担建立 happens-before 关系的作用,避免线程间看到违反直觉的执行结果。
常见工具怎么选
简单共享状态优先考虑 synchronized 或锁;只需要可见性时再看 volatile;并发计数、无锁更新则常用原子类;控制并发量时可以用信号量。
一句话理解
线程同步不是只为“加锁”,而是为了让多个线程对共享数据的读写结果可控、可见、可推理。
正文完




