/** * 多个线程同时读一个资源类没有任何问题,因此为了知足并发量,读取共享资源 * 应该同时进行。 * 可是,若是有一个线程想去写共享资源来,就不该该再有其它线程能够对该资源进行读或者写 * 小结: * 读—读能共存 * 读写不能共存 * 写写不能共存 */ 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(); } }