ReentrantReadWriteLock总结
ReentrantReadWriteLock的流程的一些特性;
// ReentrantReadWriteLock.WriteLock.lock()特性:
• 已持有读锁的线程不能再持有写锁;
• 已持有写锁的线程可以再持有写锁,这和ReentrantLock的重入锁概念是一致的;
• 已持有读锁的线程,其他线程是不能持有写锁的;
• 已持有写锁的线程,其他线程是不能持有写锁的;
// ReentrantReadWriteLock.ReadLock.lock()特性:
• 已持有写锁的线程,其他线程是不能持有读锁的;
• 已持有写锁的线程可以再持有读锁,这里我们称之为锁降级;
• 已持有读锁的线程可以再持有读锁,这和ReentrantLock的重入锁概念是一致的;
• 已持有读锁的线程,其他线程也可以持有读锁的;
3、然而将上面的WriteLock\ReadLock特性进行合并为:
• 已持有写锁的线程可以再持有写锁,这和ReentrantLock的重入锁概念是一致的;
• 已持有写锁的线程,其他线程是不能持有读锁、写锁的;
• 已持有写锁的线程可以再持有读锁,这里我们称之为锁降级;
• 已持有读锁的线程可以再持有读锁,这和ReentrantLock的重入锁概念是一致的;
• 已持有读锁的线程,其他线程也可以持有读锁的;
• 已持有读锁的线程,其他线程(同时也包括已持有读锁的线程)是不能持有写锁的;
4、排除可重入的特性,再精炼合并特性为:
• 写锁会排斥读锁、写锁,但是读锁会阻塞写锁;
• 写锁可以降级为读锁,但读锁不能升级为写锁;
ReentrantReadWriteLock总结的更多相关文章
- 【Java并发编程实战】-----“J.U.C”:ReentrantReadWriteLock
ReentrantLock实现了标准的互斥操作,也就是说在某一时刻只有有一个线程持有锁.ReentrantLock采用这种独占的保守锁直接,在一定程度上减低了吞吐量.在这种情况下任何的"读/ ...
- 架构师养成记--14.重入锁ReentrantLock 和 读写锁 ReentrantReadWriteLock
ReentrantLock 有嗅探锁定和多路分支等功能,其实就是synchronized,wait,notify的升级. this锁定当前对象不方便,于是就有了用new Object()来作为锁的解决 ...
- 【JUC】JDK1.8源码分析之ReentrantReadWriteLock(七)
一.前言 在分析了锁框架的其他类之后,下面进入锁框架中最后一个类ReentrantReadWriteLock的分析,它表示可重入读写锁,ReentrantReadWriteLock中包含了两种锁,读锁 ...
- Lock、ReentrantLock、synchronized、ReentrantReadWriteLock使用
先来看一段代码,实现如下打印效果: 1 2 A 3 4 B 5 6 C 7 8 D 9 10 E 11 12 F 13 14 G 15 16 H 17 18 I 19 20 J 21 22 K 23 ...
- Java多线程系列--“JUC锁”08之 共享锁和ReentrantReadWriteLock
概要 Java的JUC(java.util.concurrent)包中的锁包括"独占锁"和"共享锁".在“Java多线程系列--“JUC锁”02之 互斥锁Ree ...
- ReentrantReadWriteLock读写锁详解
一.读写锁简介 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁.在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源:但是如果一个线 ...
- ReentrantReadWriteLock类和ReentrantLock类的区别
Java.util.concurrent.locks包定义了两个锁类,ReentrantLock和ReentrantReadWriteLock类. 当有很多线程都从某个数据结构中读取数据而很少有线程对 ...
- 多线程之ReentrantReadWriteLock
java5以后在java.util.concurrent包下,有很多的并发类,可以让我们摆脱java5时,笨重的写法来满足多线程,而且提供了更加丰富的使用场景能力 其中,在locks包下,提供了 Re ...
- Java中的显示锁 ReentrantLock 和 ReentrantReadWriteLock
在Java1.5中引入了两种显示锁,分别是可重入锁ReentrantLock和可重入读写锁ReentrantReadWriteLock.它们分别实现接口Lock和ReadWriteLock.(注意:s ...
- java ReentrantReadWriteLock
// read and write lock is mutual exclusion lock //Listing 7-3. Using ReadWriteLock to Satisfy a Dict ...
随机推荐
- Android使用com.google.android.cameraview.CameraView进行拍照
import android.Manifest;import android.annotation.SuppressLint;import android.content.Context;import ...
- Opengl_入门学习分享和记录_番外篇00(MacOS上如何给Xcode 适配openGL)
现在前面的废话:哇这次没有鸽太久,突然想起来还没有介绍如何适配opengl的衍生库.今天一并介绍下,同样看时间允不允许,让我再把之前学到的一些东西再次总结一遍. 正文开始: 首先大家要知道我们的Ope ...
- Markdown 基本语法(后面继续补充)
1.1 Markdown 基础语法 有序内容和无序内容 有序内容:输入1.然后按tab键 无序内容:输入' * ' 或 ' - ' 然后后按tab键 字体的样式 *** 内容 *** 加粗加斜(中间没 ...
- h5微信浏览器复制粘贴--ios兼容问题的解决方法(clipboard.js插件)
前段时间在做微信h5的时候,遇到了ios兼容,使用clipboard.js插件完美解决 下载地址:下载地址: https://github.com/zenorocha/clipboard.js cnd ...
- Django+Vue前后端分离项目的部署
部署静态文件: 静态文件有两种方式 1:通过django路由访问 2:通过nginx直接访问 方式1: 需要在根目录的URL文件中增加 url(r'^$', TemplateView.as_view( ...
- python学习之路(2)---字符编码
二进制编码 bin(300) python计算二进制编码,十进制转2进制 一个二进制位就是1bit 1bit代表了8个字节,00001111 1bit = 1bytes 缩写1b 1kb ...
- C语言的输入
%*2d%d 去掉前面两位 新旧函数 scanf和scanf_s 去掉安全检查 整型 scanf(“%d”,&x); scanf_s(“%d”,&x); 字符型 char ch; sc ...
- 运行所选代码生成器时出错:“值-1超出了可接受的[0,2147483647]范围。参数名称:value”
在使用vs2019添加mvc控制器的时候 这已经是第二次遇到这个问题了.常言道,多喝热水,重启试试.有时候当应用工作不正常,重启也许能解决问题.但是程序员通常接触不到服务器系统权限.而运维人员和公司流 ...
- @RequestBody 注意的问题
contentType : "application/json", //只能是这个 RequestBody 不能和form/data共存: @RequestMapping(valu ...
- 小白学习day2------比较运算
1 算术运算 加+ 2+3=5 减 - 3-2=1 乘 * 2*3=6 除 / 6/2=3 取膜 % 余数 幂 ** 2**3=8 整除 // 9//4=2 2 比较运算 == 判断是否等于 != , ...