ReadWriteLock 接口详解

这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客

读写锁的成分是什么?

  • 读锁 Lock readLock();

    • 只要没有写锁,读锁可以被多个线程同时拥有
  • 写锁 Lock writeLock();
    • 写锁是独占的

所有读写锁的实现,都必须保证:写锁的内存同步效果也应该适用于读操作,也就是说,一个获取读锁的线程 应该可以看到上一个写锁所做的所有更新

读写锁与互斥锁的优劣比较

  • 相比较于互斥锁,读写锁 在什么情况下 具有更高的性能呢?

    • 这取决于数据被读取的频率 ,读和写操作的持续时间,存取数据的冲突
    • 也可以说是,同时读写数据的线程的数量
    • 例如:一个集合的数据被初始化之后,就很少再修改,然而被频繁的查找,这就是一个读写锁的理想的使用情况。
  • 那什么时候不适合用读写锁呢?
    • 如果更新数据变得频繁,那么数据大部分时间被独占,使用读写锁 并发性几乎没有增加。
    • 此外,如果读操作花费的时间很短,那么读写锁实现 所造成的消耗(读写锁本质上比互斥锁更复杂)会主导执行成本,尤其是

      当读写锁的实现 仍然通过一小段代码序列化所有线程时。
  • 最终,只有分析和测量才能评价一个读写锁是否适合你的应用程序。

读写锁的实现必须要做的决策

  • 在一个写操作释放写锁时,同时有写操作和读操作在等待,确定授予读锁还是写锁。

    • 优先写操作较多,因为写操作一般是短的、不频繁的。
    • 优先读操作较少,因为如果读操作是频繁的、时间长的,会导致写操作的长时间等待
  • 当一个读操作是活跃的,写操作在等待时,一个读操作请求读锁,确定是否授予读锁。
    • 优先读操作会无限期的推迟写草所
    • 优先写操作会减少并发的可能性
  • 确定锁是否可重入
    • 一个拥有写锁的线程能否重复获取它?
    • 拥有写锁时,能否获取读锁?
    • 读锁可以再次获取吗?
  • 写锁可以降级为读锁,而不允许插入写操作吗?
  • 读锁可以升级为写锁,并优先于其他正在等待的读操作和写操作吗?

ReadWriteLock 接口详解的更多相关文章

  1. JDBC常用接口详解

    JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...

  2. Java6.0中Comparable接口与Comparator接口详解

    Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...

  3. socket接口详解

    1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...

  4. “全栈2019”Java第八十四章:接口中嵌套接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  5. “全栈2019”Java第八十三章:内部类与接口详解

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. Java接口 详解(二)

    上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...

  7. [转载]MII/MDIO接口详解

    原文地址:MII/MDIO接口详解作者:心田麦浪 本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在 ...

  8. map接口详解

    1.Map接口详解(1)映射(map)是一个存储键.键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象(2)键必须是唯一的,值可以重复(Map接口映射唯一的键到值)(3)有些映射可以接收 ...

  9. java.io.DataInput接口和java.io.DataOutput接口详解

    public interface DataInput DataInput 接口用于从二进制流中读取字节,并重构所有 Java 基本类型数据.同时还提供根据 UTF-8 修改版格式的数据重构 Strin ...

随机推荐

  1. mq 的缺点?

    (1)系统可用性降低 系统引入的外部依赖越多,越容易挂掉,本来你就是 A 系统调用 BCD 三个系统的接口就好了,人 ABCD 四个系统好好的,没啥问题,你偏加个 MQ 进来,万一MQ 挂了咋整?MQ ...

  2. zookeeper 负载均衡和 nginx 负载均衡区别?

    zk 的负载均衡是可以调控,nginx 只是能调权重,其他需要可控的都需要自己写插件:但是 nginx 的吞吐量比 zk 大很多,应该说按业务选择用哪种方式.

  3. 使用 Spring 访问 Hibernate 的方法有哪些?

    我们可以通过两种方式使用 Spring 访问 Hibernate: 1. 使用 Hibernate 模板和回调进行控制反转 2. 扩展 HibernateDAOSupport 并应用 AOP 拦截器节 ...

  4. java接口返回为空时候如何处理

    java前后端分离以后,后端常常返回给前端以下的内容: 如果遇到某个字段的内容为空的时候会出现这样的情况: 图中红色箭头的情况是一个数组集合,但是该集合为空,所以就返回null,但是我们如果想对于这样 ...

  5. Netty学习摘记 —— 心跳机制 / 基于分隔符和长度的协议

    本文参考 本篇文章是对<Netty In Action>一书第十一章"预置的ChannelHandler和编解码器"的学习摘记,主要内容为通过 SSL/TLS 保护 N ...

  6. 攻防世界杂项MISCall

    MISCall 下载下来是一个附件但是不清楚他是个什么东西我先拉入kali看看 发现是一个tar包不过这个包我们需要使用以下的指令来解压 tar -xjvf d02f31b893164d56b7a8e ...

  7. the compatibility problem of ie

    ie8hack ie8下的兼容问题处理:背景透明,css3圆角,css3和jquery支持部分css3选择器(例如:nth-child),支持html5的语义化标签,媒体查询@media等. 在htm ...

  8. video标签学习使用

    video标签学习使用 学习前的理解 video是HTML5中的新标签,可以用来播放视频.对于不同的浏览器支持的视频格式不一样,但是具体浏览器支持的类型并不清楚. 支持的类型 视频的格式分为编码格式和 ...

  9. javaweb之删除功能

    对数据库的删除,主要是通过表中的一个数据查询来进行逐个删除,否则会清空整张表. 一.dao层 在dao层加入删除方法 public boolean delete(Course n) { boolean ...

  10. 面试官:Zookeeper怎么解决读写、双写并发不一致问题,以及共享锁的实现原理?

    哈喽!大家好,我是小奇,一位不靠谱的程序员 小奇打算以轻松幽默的对话方式来分享一些技术,如果你觉得通过小奇的文章学到了东西,那就给小奇一个赞吧 文章持续更新 一.前言 今天清明假期,赶上北京玉渊潭公园 ...