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(); }}
当有线程获取写锁的时候,其余线程去调用读相干操作,没方法获取读锁,只能期待写锁开释,才能够获取。