zoukankan      html  css  js  c++  java
  • 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();
    }
    }
  • 相关阅读:
    oracle mybatis 模糊查询
    IntelliJ IDEA各种引入jar包的方式及其关系
    eclipse中新建Java工程的三个JRE选项区别
    @Autowired注解和@resource注解的区别
    结合测试,黑盒测试
    Oracle左连接、右连接、全外连接以及(+)号用法
    samePropertyValuesAs()
    Collection.sort 的用法
    junit withcapture
    单元测试
  • 原文地址:https://www.cnblogs.com/shanbaoxin/p/11662190.html
Copyright © 2011-2022 走看看