ReadWriteLock使用方法

  /**     * 多个线程同时读一个资源类没有任何问题,因此为了知足并发量,读取共享资源     * 应该同时进行。     * 可是,若是有一个线程想去写共享资源来,就不该该再有其它线程能够对该资源进行读或者写     * 小结:     * 读—读能共存     * 读写不能共存     * 写写不能共存     */    public static void main(String[] args) {        Mycache mycache=new Mycache();        for(int i=0;i<=5;i++){            final int t=i;         new Thread(()->{             mycache.put(Thread.currentThread().getName(),t+"");         },String.valueOf(i)).start();        }        for(int i=0;i<=5;i++){            new Thread(()->{                mycache.get(Thread.currentThread().getName());            },String.valueOf(i)).start();        }    }}class Mycache{    private volatile HashMap<String,Object> hashMap=new HashMap<>();    private ReadWriteLock readWriteLock=new ReentrantReadWriteLock();    public void  put(String key, Object value){       readWriteLock.writeLock().lock();       try{           System.out.println(Thread.currentThread().getName()+"\t写入数据"+key);           hashMap.put(key,value);           System.out.println(Thread.currentThread().getName()+"\t写入完成");       }catch (Exception e){       }finally {           readWriteLock.writeLock().unlock();       }    }    public void get(String key){        readWriteLock.readLock().lock();        try{            System.out.println(Thread.currentThread().getName()+"\t读取数据"+key);            hashMap.get(key);            System.out.println(Thread.currentThread().getName()+"\t读取完成");        }catch (Exception e){        }finally {            readWriteLock.readLock().unlock();        }    }
相关文章
相关标签/搜索