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

    独占锁(写锁):一次只能被一个线程占有
    共享锁(读锁):该锁可以被多个线程占有!

     测试代码

    // 加锁操作: 读写锁
    class MyCacheLock{
        private volatile Map<String, Object> map = new HashMap<>();
        //    读写锁
        private ReadWriteLock lock = new ReentrantReadWriteLock();
    
        // 读 : 可以被多个线程同时读
        public void get(String key) {
            Lock readLock = this.lock.readLock();
            readLock.lock();
            try {
                System.out.println(Thread.currentThread().getName() + "读取" + key);
                Object o = map.get(key);
                System.out.println(Thread.currentThread().getName() + "读取结果:" + o);
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                readLock.unlock();
            }
        }
    
        // 写 :应该是保证原子性 , 不应该被打扰
        public void put(String key, Object value) {
            Lock writeLock = this.lock.writeLock();
            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 {
                writeLock.unlock();
            }
        }
    }

    测试结果:

  • 相关阅读:
    【Gym
    [matlab工具箱] 曲线拟合Curve Fitting
    数学建模 常用
    “这么多人给我作证,我不怕”
    超星尔雅刷课辅助
    细思《都挺好》
    P5173 传球
    [ICPC 北京 2017 J题]HihoCoder 1636 Pangu and Stones
    CF 1131C Birthday
    CF 634A Island Puzzle
  • 原文地址:https://www.cnblogs.com/alenblue/p/12430645.html
Copyright © 2011-2022 走看看