上节中提到锁的运用,但在在实际情况中读写操作全部都互斥的话太影响效率了于是jdk 提供了一种机制读写锁下面给出一个缓存的例子。
public class Main {
Map<String,User> map=new HashMap<String,User>();
ReadWriteLock rw=new ReentrantReadWriteLock();
public User getRntity(String name){
try {
rw.readLock().lock();
User user=map.get(name);
if (user==null){
rw.readLock().unlock();
rw.writeLock().lock();
try {
if (user==null){
//假设3个线程被锁在写锁这里了一个线程获取到数据其他两个线程就没有必要在获取数据了
user=getUser(name);
map.put(name,user);
}
return user;
}finally {
rw.writeLock().unlock();
}
}else{
return user;
}
}finally {
rw.readLock().unlock();
}
}
public User getUser(String name){
return new User();//from db
}
}
class User{};
文章地址:http://www.haha174.top/article/details/254363
项目源码:https://github.com/haha174/thread-learning.git