同步工具类存在的意义
管程或者信号量可以解决所有的并发问题,那么同步工具类存在的意义是什么呢?
两个字:方便。
针对不同的并发场景,使用对应的工具类可以快速完成业务开发。
1. ReadWriteLock
1.1 使用场景
-
允许多个线程同时读共享变量
-
只允许一个线程写共享变量
-
如果一个写线程正在执行写操作,此时禁止读线程读共享变量
1.2 例子
class Cache<K, V> {
private final ReadWriteLock lock = new ReentrantReadWriteLock();
private final Lock writeLock = lock.writeLock();
private final Lock readLock = lock.readLock();
private final Map<K, V> cache = new HashMap<>();
public void put(K key, V val) {
writeLock.lock();
try {
cache.put(key, val);
} finally {
writeLock.unlock();
}
}
public V get(K key) {
readLock.lock();
try {
return cache.get(key);
} finally {
readLock.unlock();
}
}
}