Java并发18:读写锁ReadWriteLock - 优化读多写少场景
引言:ReentrantLock的性能瓶颈 在上一篇文章中,我们学习了ReentrantLock,但它有一个性能问题: public class Cache { private final Map<String, String> map = new HashMap<>(); private final Lock lock = new ReentrantLock(); public String get(String key) { lock.lock(); // 读操作也要加锁 try { return map.get(key); } finally { lock.unlock(); } } public void put(String key, String value) { lock.lock(); // 写操作加锁 try { map.put(key, value); } finally { lock.unlock(); } } } 问题: 读操作(get)本身是线程安全的,多个线程可以同时读 但ReentrantLock是独占锁,同一时刻只有一个线程能持有 大量读操作被阻塞,性能差 解决方案:使用读写锁(ReadWriteLock) public class CacheWithReadWriteLock { private final Map<String, String> map = new HashMap<>(); private final ReadWriteLock rwLock = new ReentrantReadWriteLock(); private final Lock readLock = rwLock.readLock(); private final Lock writeLock = rwLock.writeLock(); public String get(String key) { readLock.lock(); // 读锁(共享) try { return map.get(key); } finally { readLock.unlock(); } } public void put(String key, String value) { writeLock.lock(); // 写锁(独占) try { map.put(key, value); } finally { writeLock.unlock(); } } } 性能提升(10个线程,90%读操作): ...