zoukankan      html  css  js  c++  java
  • ReentrantReadWriteLock总结

    ReentrantReadWriteLock的流程的一些特性;

    // ReentrantReadWriteLock.WriteLock.lock()特性:
    • 已持有读锁的线程不能再持有写锁;
    • 已持有写锁的线程可以再持有写锁,这和ReentrantLock的重入锁概念是一致的;
    • 已持有读锁的线程,其他线程是不能持有写锁的;
    • 已持有写锁的线程,其他线程是不能持有写锁的;

    // ReentrantReadWriteLock.ReadLock.lock()特性:
    • 已持有写锁的线程,其他线程是不能持有读锁的;
    • 已持有写锁的线程可以再持有读锁,这里我们称之为锁降级;
    • 已持有读锁的线程可以再持有读锁,这和ReentrantLock的重入锁概念是一致的;
    • 已持有读锁的线程,其他线程也可以持有读锁的;

    3、然而将上面的WriteLockReadLock特性进行合并为:
    • 已持有写锁的线程可以再持有写锁,这和ReentrantLock的重入锁概念是一致的;
    • 已持有写锁的线程,其他线程是不能持有读锁、写锁的;
    • 已持有写锁的线程可以再持有读锁,这里我们称之为锁降级;

    • 已持有读锁的线程可以再持有读锁,这和ReentrantLock的重入锁概念是一致的;
    • 已持有读锁的线程,其他线程也可以持有读锁的;
    • 已持有读锁的线程,其他线程(同时也包括已持有读锁的线程)是不能持有写锁的;

    4、排除可重入的特性,再精炼合并特性为:
    • 写锁会排斥读锁、写锁,但是读锁会阻塞写锁;
    • 写锁可以降级为读锁,但读锁不能升级为写锁; 

  • 相关阅读:
    项目中使用Redis的游标scan的一些小问题
    mac上使用Sequel Pro工具SSH连接数据库
    virtualbox通过Nat模式上网,宿主机与宿主机互通
    Mac系统docker初探
    QQ互联,填写回调时注意事项
    Centos中编辑php扩展库
    samba服务介绍
    bash常用功能
    vsftp服务介绍与相关实验
    shell概述与echo命令
  • 原文地址:https://www.cnblogs.com/heqiyoujing/p/11145196.html
Copyright © 2011-2022 走看看