讀寫鎖,分場景優化,提高性能。java
讀寫鎖適用於讀多寫少的場景。緩存
讀寫鎖與互斥鎖的區別:讀寫鎖運行多個線程同時讀共享變量。多線程
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(); } } }
鎖升級:讀鎖->寫鎖; 先獲取讀鎖,而後升級爲寫鎖。線程
鎖降級:寫鎖->讀鎖;先獲取寫鎖,人後升級爲讀鎖。code
ReadWriteLock支持鎖的降級,不支持升級。接口
由讀鎖變寫鎖須要先把讀鎖釋放掉再獲取寫鎖,由寫鎖變讀鎖無需釋放寫鎖。ip
**** 碼字不易若是對你有幫助請給個關注****get
**** 愛技術愛生活 QQ羣: 894109590****