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 ...
随机推荐
- 什么是原子操作?在 Java Concurrency API 中有哪些原 子类(atomic classes)?
原子操作(atomic operation)意为"不可被中断的一个或一系列操作" . 处理器使用基于对缓存加锁或总线加锁的方式来实现多处理器之间的原子操作. 在 Java 中可以通 ...
- Mybatis 的一级、二级缓存?
1)一级缓存: 基于 PerpetualCache 的 HashMap 本地缓存,其存储作用域为 Session,当 Session flush 或 close 之后,该 Session 中的所有 C ...
- Java并发机制(1)--线程状态与方法(转)
Java并发编程:Thread类的使用 个人总结:参考:博客园-海子-http://www.cnblogs.com/dolphin0520/p/3920357.html 参考:https://blog ...
- Mybatis框架基础入门(一)--简介及优势
一.什么是Mybatis 这里借用官网的一句话介绍什么是mybatis:MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC ...
- Thread 类的 sleep()方法和对象的 wait()方法都可以让线 程暂停执行,它们有什么区别?
sleep()方法(休眠)是线程类(Thread)的静态方法,调用此方法会让当前线程 暂停执行指定的时间,将执行机会(CPU)让给其他线程,但是对象的锁依然保 持,因此休眠时间结束后会自动恢复(线程回 ...
- 两个相同的对象会有不同的的 hash code 吗?
不能,根据 hash code 的规定,这是不可能的.
- torch.optim.SGD参数详解
随机梯度下降法 $\theta_{t} \leftarrow \theta_{t-1}-\alpha g_{t}$ Code: optimzer = torch.optim.SGD(model.par ...
- 解决Mui中popover 顶部弹出菜单弹出位置不准确以及无法收回的问题
前言 最近公司的项目转向使用Hbuilder开发移动端项目,其中想要通过在顶部标题栏加入弹出菜单的方式,来定位长列表的位置,如图所示. 问题 Mui的功能貌似还不是很完善,在使用这个弹出菜单的时候,发 ...
- 重磅:前端 MVVM 与 FRP 的升阶实践 —— ReRest 可视化编程
ReRest (Reactive Resource State Transfer) 是前端开发领域新兴的方法论体系,它继承了 MVVM 与 FRP 编程理念,在技术上有不少创新.本文从专利稿修改而来, ...
- 【weex开发】weex官方源码
公司目前使用版本:weex_sdk:0.10.0 介绍地址:https://bintray.com/alibabaweex/maven/weex_sdk/0.18.0 weex最新版本:weex_sd ...