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();
            }
        }
    }

    测试结果:

  • 相关阅读:
    python全局变量与局部变量
    TCP的三次握手四次挥手
    关于Http的面试题
    HSTS
    关于网络安全攻防知识
    http详解
    python中的f''、b''、u''、r''
    常见SQL Server导入导出数据的几个工具
    chrome浏览器中 F12 功能的简单介绍
    Sqlcmd使用详解
  • 原文地址:https://www.cnblogs.com/alenblue/p/12430645.html
Copyright © 2011-2022 走看看