Java提供了读写锁。读写锁分为读锁和写锁两种,多个读锁不互斥,读锁与写锁互斥。
在java中读写锁接口java.util.concurrent.locks.ReadWriteLock的实现类ReentrantReadWriteLock来完成对读写锁的定义。
public class SeafCache {
//map模拟读写操作
private final Map<String,Object> cache=new HashMap<String,Object>();
private final ReentrantReadWriteLock rwLock=new ReentrantReadWriteLock();
private final Lock readLock=rwLock.readLock();//读锁
private final Lock writeLock=rwLock.writeLock();//写锁
//在读数据库的时候加读锁
public Object get(String key){
readLock.lock();
try {
return cache.get(key);
}finally {
readLock.unlock();
}
}
//在写数据库的时候加写锁
public Object put(String key,Object value){
writeLock.lock();
try {
return cache.put(key, value);
}finally {
writeLock.unlock();
}
}
}