Java 面试宝典:volatile 的使用场景有哪些?
💡
原文中文,约2700字,阅读约需7分钟。
📝
内容提要
volatile是一种轻量级的同步机制,确保共享变量的可见性和操作的有序性,但不能确保原子性。适用于多个线程读、一个线程写的场景,如状况标志、DCL的单例模式和开销较低的读-写锁策略。要正确使用volatile,写入变量不能依赖于旧值,变量不能参与其他变量的不变性条件。
🎯
关键要点
- volatile 是一种轻量级的同步机制,确保共享变量的可见性和操作的有序性,但不能确保原子性。
- 使用 volatile 必须满足两个条件:写入变量不依赖于当前值,变量不参与其他变量的不变性条件。
- volatile 适合多个线程读、一个线程写的场景,如状况标志、DCL 的单例模式和开销较低的读-写锁策略。
- 状况标志:使用 volatile 确保线程能及时看到状态变化。
- DCL 的单例模式:使用 volatile 防止指令重排序,确保线程安全的单例实例初始化。
- 开销较低的读-写锁策略:允许多个线程读取资源,但只允许一个线程写入,适合读多写少的场景。
- 在 J.U.C 中,ReentrantReadWriteLock 提供了读写锁机制,支持多个线程同时读取和单个线程写入。
➡️