ReadWriteLock 读写锁,只有读读不互斥,其余都互斥。写了个小demo,来加深下印象。
public class MyChahe {    private Map<String,Object> 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 = 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();    }}

当有线程获取写锁的时候,其余线程去调用读相干操作,没方法获取读锁,只能期待写锁开释,才能够获取。