ReadWriteLock

ReadWriteLock 读写锁,只有读读不互斥,其他都互斥。写了个小demo,来加深下印象。

public class MyChahe {private Map map=new HashMap<>(); private ReadWriteLock lock=new ReentrantReadWriteLock(); public void put(String key,Object value){ try{ lock.writeLock().lock(); System.out.println("现在开始进行put操作----------"); map.put(key,value); Thread.sleep(5000); System.out.println("put操作结束----------"); }catch (Exception e){ e.printStackTrace(); }finally{ lock.writeLock().unlock(); } }public void get(String key){ try{ lock.readLock().lock(); System.out.println("现在开始进行get操作----------"); Object value = https://www.it610.com/article/map.get(key); System.out.println("get操作结束----------,value-->"+value); }catch (Exception e){ e.printStackTrace(); }finally{ lock.readLock().unlock(); } } }

public class LockTest {public static void main(String[] args) throws InterruptedException { MyChahe cache=new MyChahe(); new Thread(()->{ cache.put("1","aaaaaaaaaa"); }).start(); Thread.sleep(300); new Thread(()->{ cache.get("1"); }).start(); } }

【ReadWriteLock】当有线程获取写锁的时候,其他线程去调用读相关操作,没办法获取读锁,只能等待写锁释放,才可以获取。

    推荐阅读