ReadWriteLock读写锁
读写锁,分场景优化,提升性能。读写锁遵守的基本原则:允许多个线程同时读共享变量。只允许一个线程写共享变量。如果一个写线程正在执行写操作,此时禁止多线程读共享变量。读锁与写锁是互斥的;写锁与写锁也是互斥的。读写锁适用于读多写少的场景。读写锁与互斥锁的区别:读写锁运行多个线程同时读共享变量。ReadWriteLock 是一个接口,ReentrantReadWriteLock可...
·
读写锁,分场景优化,提升性能。
读写锁遵守的基本原则:
- 允许多个线程同时读共享变量。
- 只允许一个线程写共享变量。
- 如果一个写线程正在执行写操作,此时禁止多线程读共享变量。
- 读锁与写锁是互斥的;写锁与写锁也是互斥的。
读写锁适用于读多写少的场景。
读写锁与互斥锁的区别:读写锁运行多个线程同时读共享变量。
ReadWriteLock 是一个接口,ReentrantReadWriteLock可重入读写锁是他的实现类。
读写锁实例:
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
/**
* @Description:
* @Author: LYQ
* @Date: 2019/9/10 11:12
* @Version: V1.0
**/
public class Cache<K,V> {
final Map<K,V> m = new HashMap<>();
final ReadWriteLock rwl = new ReentrantReadWriteLock();
//读锁
final Lock r = rwl.readLock();
//写锁
final Lock w = rwl.writeLock();
/**
* 读缓存
* @param key
* @return
*/
V get(K key){
//获取读锁
r.lock();
try {
return m.get(key);
}finally {
r.unlock();
}
}
/**
* 写缓存
* @param key
* @param value
* @return
*/
V put(K key,V value){
w.lock();
try{
return m.put(key,value);
}finally {
w.unlock();
}
}
}
锁的升级与降级
锁升级:读锁->写锁; 先获取读锁,然后升级为写锁。
锁降级:写锁->读锁;先获取写锁,人后升级为读锁。
ReadWriteLock支持锁的降级,不支持升级。
由读锁变写锁需要先把读锁释放掉再获取写锁,由写锁变读锁无需释放写锁。

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。
更多推荐
所有评论(0)