ReadWriteLock 接口详解
ReadWriteLock 接口详解
这是本人阅读ReadWriteLock接口源码的注释后,写出的一篇知识分享博客
读写锁的成分是什么?
- 读锁 Lock readLock();
- 只要没有写锁,读锁可以被多个线程同时拥有
- 写锁 Lock writeLock();
- 写锁是独占的
所有读写锁的实现,都必须保证:写锁的内存同步效果也应该适用于读操作,也就是说,一个获取读锁的线程 应该可以看到上一个写锁所做的所有更新
读写锁与互斥锁的优劣比较
- 相比较于互斥锁,读写锁 在什么情况下 具有更高的性能呢?
- 这取决于数据被读取的频率 ,读和写操作的持续时间,存取数据的冲突
- 也可以说是,同时读写数据的线程的数量
- 例如:一个集合的数据被初始化之后,就很少再修改,然而被频繁的查找,这就是一个读写锁的理想的使用情况。
- 那什么时候不适合用读写锁呢?
- 如果更新数据变得频繁,那么数据大部分时间被独占,使用读写锁 并发性几乎没有增加。
- 此外,如果读操作花费的时间很短,那么读写锁实现 所造成的消耗(读写锁本质上比互斥锁更复杂)会主导执行成本,尤其是
当读写锁的实现 仍然通过一小段代码序列化所有线程时。
- 最终,只有分析和测量才能评价一个读写锁是否适合你的应用程序。
读写锁的实现必须要做的决策
- 在一个写操作释放写锁时,同时有写操作和读操作在等待,确定授予读锁还是写锁。
- 优先写操作较多,因为写操作一般是短的、不频繁的。
- 优先读操作较少,因为如果读操作是频繁的、时间长的,会导致写操作的长时间等待
- 当一个读操作是活跃的,写操作在等待时,一个读操作请求读锁,确定是否授予读锁。
- 优先读操作会无限期的推迟写草所
- 优先写操作会减少并发的可能性
- 确定锁是否可重入
- 一个拥有写锁的线程能否重复获取它?
- 拥有写锁时,能否获取读锁?
- 读锁可以再次获取吗?
- 写锁可以降级为读锁,而不允许插入写操作吗?
- 读锁可以升级为写锁,并优先于其他正在等待的读操作和写操作吗?
ReadWriteLock 接口详解的更多相关文章
- JDBC常用接口详解
JDBC中常用接口详解 ***DriverManager 第一.注册驱动 第一种方式:DriverManager.registerDriver(new com.mysql.jdbc.Driver()) ...
- Java6.0中Comparable接口与Comparator接口详解
Java6.0中Comparable接口与Comparator接口详解 说到现在,读者应该对Comparable接口有了大概的了解,但是为什么又要有一个Comparator接口呢?难道Java的开发者 ...
- socket接口详解
1. socket概述 socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用已实现进程在网络中通信. socket起源于UNIX,在Unix一切 ...
- “全栈2019”Java第八十四章:接口中嵌套接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- “全栈2019”Java第八十三章:内部类与接口详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Java接口 详解(二)
上一篇Java接口 详解(一)讲到了接口的基本概念.接口的使用和接口的实际应用(标准定义).我们接着来讲. 一.接口的应用—工厂设计模式(Factory) 我们先看一个范例: package com. ...
- [转载]MII/MDIO接口详解
原文地址:MII/MDIO接口详解作者:心田麦浪 本文主要分析MII/RMII/SMII,以及GMII/RGMII/SGMII接口的信号定义,及相关知识,同时本文也对RJ-45接口进行了总结,分析了在 ...
- map接口详解
1.Map接口详解(1)映射(map)是一个存储键.键值对的对象,给定一个键,可以查询得到它的值,键和值都可以是对象(2)键必须是唯一的,值可以重复(Map接口映射唯一的键到值)(3)有些映射可以接收 ...
- java.io.DataInput接口和java.io.DataOutput接口详解
public interface DataInput DataInput 接口用于从二进制流中读取字节,并重构所有 Java 基本类型数据.同时还提供根据 UTF-8 修改版格式的数据重构 Strin ...
随机推荐
- 手撕代码:leetcode 309最佳买卖股票时机含冷冻期
转载于:https://segmentfault.com/a/1190000014746613 给定一个整数数组,其中第i个元素代表了第i天的股票价格. 设计一个算法计算出最大利润.在满足以下约束条件 ...
- 表单属性method的值get和post的区别?什么时候用get?什么时候用post?
get和post的区别 一.安全性 因为get会将用户名和密码放在URL中,进而出现在浏览器的历史记录中,显然这种情况应该用post. 二.编码 get只能向服务器发送ASCII字符,而post则可以 ...
- 学习tomcat(三)
一.tomcat安装 1.部署java环境 # yum install java-1.8.0 # java -version 2.部署tomcat # mkdir /data/soft -p # cd ...
- 在IE中设置在序列化没有版本号就提示
- Mybatis-Plus 如何实现一对多关系 举例 用户与角色
Mybatis-Plus 一对多Mybatis-Plus 不写一句sql语句实现一对多 首先来看效果 Mysql数据库 用户表 角色表 用户与角色的中间表 中间表如下 将三张表通过Mybatis Pl ...
- GlusterFS(GFS) 分布式存储
GlusterFS(GFS) 分布式存储 GFS 分布式文件系统 目录 一: GlusterFS 概述 1.1 GlusterFS 简介 1.2 GlusterFS特点 1.2.1 扩展性和高性能 ...
- USART_GetITStatus()和USART_GetFlagStatus()的区别
USART_GetITStatus()和USART_GetFlagStatus()的区别 都是访问串口的SR状态寄存器,唯一不同是,USART_GetITStatus()会判断中断是否开启,如果没开启 ...
- k-medoids算法
k-medoids算法 对上面图形的解释 第一幅图:原来p属于Oj的(实线),当Orandom代替了Oj,p属于Oi了(虚线):第二幅图:原来p属于Oj的(实线),当Orandom代替了Oj,p属于O ...
- 关于js中this指向的总结
js中this指向问题一直是个坑,之前一直是懵懵懂懂的,大概知道一点,但一直不知道各种情况下指向有什么区别,今天亲自动手测试了下this的指向. 1.在对象中的this对象中的this指向我们创建的对 ...
- buuoj [RoarCTF 2019]Easy Calc(利用PHP的字符串解析特性)
web [RoarCTF 2019]Easy Calc(利用PHP的字符串解析特性) 先上源码 <?phperror_reporting(0);if(!isset($_GET['num'])){ ...