• 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();
    }
    }
  • 相关阅读:
    简单工厂模式
    工厂方法模式
    Linq对DatatTable进行分组统计
    微软现在支持某一路径下?占位符的文件扫描
    Spring MVC中InternalResourceViewResolver视图解析器的默认行为
    什么是 HandlerMethod ?
    03基于NIO的聊天室案例
    01基于BIO的多人聊天室
    02基于BIO的多线程客户端服务器通信案例
    java8新特性学习
  • 原文地址:https://www.cnblogs.com/shanbaoxin/p/11662190.html
Copyright © 2020-2023  润新知