读写锁通过分离读写锁提升并发性能,允许多个读线程同时访问,写锁独占;ReentrantReadWriteLock 实现读写分离,读锁共享可重入,写锁排他且可降级;支持公平与非公平模式,适用于读多写少场景如缓存,需注意避免读锁升级导致死锁。
Java中的读写锁(ReadWriteLock)是一种特殊的锁机制,它通过分离读操作和写操作的锁来提升并发性能。最常用的实现是 ReentrantReadWriteLock。它的核心特性在于允许多个读线程同时访问共享资源,但写操作是独占的。
读写锁维护了一对锁:
这种分离使得在读多写少的场景下,并发效率远高于普通的互斥锁(如 synchronized 或 ReentrantLock)。
写操作会修改共享数据,因此必须保证原子性和可见性:
读锁是共享的,但有一些限制:
策略避免)。ReentrantReadWriteLock 支持两种模式:
可以通过构造函数指定是否启用公平性:
new ReentrantReadWriteLock(true); // 公平锁
基本上就这些。读写锁适合读频繁、写较少的场景,比如缓存、配置管理等。合理使用能显著提升并发性能,但要注意锁的获取和释放顺序,避免死锁。不复杂但容易忽略。