zoukankan      html  css  js  c++  java
  • 读写锁

    读写锁

    image-20200803191025303

    public class ReadWriteLockDemo {
        public static void main(String[] args) {
    //        MyCache myCache = new MyCache();
            MyCacheLock myCache = new MyCacheLock();
    
            // 写入
            for (int i = 1; i <= 5 ; i++) {
                final int temp = i;
                new Thread(()->{
                    myCache.put(temp+"",temp+"");
                },String.valueOf(i)).start();
            }
    
            // 读取
            for (int i = 1; i <= 5 ; i++) {
                final int temp = i;
                new Thread(()->{
                    myCache.get(temp+"");
                },String.valueOf(i)).start();
            }
    
        }
    }
    
    // 加锁的
    class MyCacheLock{
    
        private volatile Map<String,Object> map = 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);
                map.put(key,value);
                System.out.println(Thread.currentThread().getName()+"写入OK");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                readWriteLock.writeLock().unlock();
            }
        }
    
        // 取,读,所有人都可以读!
        public void get(String key){
            readWriteLock.readLock().lock();
            try {
                System.out.println(Thread.currentThread().getName()+"读取"+key);
                Object o = map.get(key);
                System.out.println(Thread.currentThread().getName()+"读取OK");
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                readWriteLock.readLock().unlock();
            }
        }
    
    }
    
    /**
     * 自定义缓存
     */
    class MyCache{
    
        private volatile Map<String,Object> map = new HashMap<>();
    
        // 存,写
        public void put(String key,Object value){
            System.out.println(Thread.currentThread().getName()+"写入"+key);
            map.put(key,value);
            System.out.println(Thread.currentThread().getName()+"写入OK");
        }
    
        // 取,读
        public void get(String key){
            System.out.println(Thread.currentThread().getName()+"读取"+key);
            Object o = map.get(key);
            System.out.println(Thread.currentThread().getName()+"读取OK");
        }
    
    }
    

    视频参考https://www.bilibili.com/video/BV1B7411L7tE
    上一篇:JUC3大常用辅助类
    下一篇:阻塞队列

  • 相关阅读:
    redis单点登录,session,cookie
    maven中pom依赖下载不下来解决方案
    nexus 3.x私服配置 windows/linux 版本
    TypeScript中元组的使用和类型约束
    TypeScript 数组类型的定义
    TypeScript函数参数和返回类型定义
    TypeScript类型注释和类型推断
    TypeScript静态类型
    TypeScript环境安装
    TypeScript学习目录
  • 原文地址:https://www.cnblogs.com/junlinsky/p/13443290.html
Copyright © 2011-2022 走看看