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

    ReadWriteLock: 一个用于只读操作,一个用于写入操作;读的时候可以由多个线程进行,写的时候只能有一个。

    • 读-读:可以共存
    • 读-写:不可共存
    • 写-写:不可共存

    读锁:共享锁

    写锁:独享锁

    代码示例

    package pers.vincent.matrix.subject.readwrite;
    
    import java.util.HashMap;
    import java.util.Map;
    import java.util.concurrent.locks.ReadWriteLock;
    import java.util.concurrent.locks.ReentrantReadWriteLock;
    
    public class ReadWriteLockTest {
    
        public static void main(String[] args) {
            MyCache cache = new MyCache();
    
    
            for (int i = 1; i <=5 ; i++) {
                new Thread(()->{
                    cache.write();
                }).start();
            }
    
    
            for (int i = 1; i <=5 ; i++) {
                new Thread(()->{
                    cache.read();
                }).start();
            }
        }
    
    }
    
    class MyCache{
        private volatile Map<String, Object> map = new HashMap<String, Object>();
    
        private ReadWriteLock readWriteLock = new ReentrantReadWriteLock();
    
        // 写入
        public void write(){
    
            try{
                readWriteLock.writeLock().lock();
    
                System.out.println(Thread.currentThread().getName()+"写入");
    
                map.put(Thread.currentThread().getName(), Thread.currentThread().getName());
    
                System.out.println(Thread.currentThread().getName()+"写入ok");
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                readWriteLock.writeLock().unlock();
            }
    
        }
    
        // 读取
        public void read(){
            try{
                readWriteLock.readLock().lock();
    
                System.out.println(Thread.currentThread().getName()+"读取");
    
                map.get(Thread.currentThread().getName());
    
                System.out.println(Thread.currentThread().getName()+"读取ok");
            }catch (Exception e){
                e.printStackTrace();
            }finally {
                readWriteLock.readLock().unlock();
            }
    
        }
    
    }
    
  • 相关阅读:
    【CodeVS 1028】 花店橱窗布置
    超赞的网络流入门教程
    【BZOJ 1798】[Ahoi2009]Seq 维护序列seq
    【洛谷 1991】 无线通讯网
    【Poj 3469】 Dual Core CPU
    【BZOJ 3504 】[Cqoi2014]危桥
    【Poj 3436】 ACM Computer Factory
    【BZOJ 3990】 [SDOI2015]排序
    【COGS 1873】 [国家集训队2011]happiness(吴确)
    最小割PPt
  • 原文地址:https://www.cnblogs.com/blackBlog/p/13451469.html
Copyright © 2011-2022 走看看