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()+" 写入数据"+key);
hashMap.put(key,value);
System.out.println(Thread.currentThread().getName()+" 写入完成");
}catch (Exception e){

}finally {
readWriteLock.writeLock().unlock();
}
}
public void get(String key){
readWriteLock.readLock().lock();
try{
System.out.println(Thread.currentThread().getName()+" 读取数据"+key);
hashMap.get(key);
System.out.println(Thread.currentThread().getName()+" 读取完成");
}catch (Exception e){
}finally {
readWriteLock.readLock().unlock();
}
}