模式6--ReadWriteLock
来至《java多线程设计模式》
自己提供一个逻辑锁代替JDK的物理锁synchronized
优点:1.对read操作不进行共享互斥,可以进行多个read操作,提高系统性能
2.适合read》write的情况
package Sample;public final class ReadWriteLock {private int readingReaders = 0; // (A)...实际正在读取的执行绪数量private int waitingWriters = 0; // (B)...正在等待写入的执行绪数量private int writingWriters = 0; // (C)...实际正在写入的执行绪数量private boolean preferWriter = true; // 写入优先的话,值为truepublic synchronized void readLock() throws InterruptedException {while (writingWriters > 0 || (preferWriter && waitingWriters > 0)) {wait();}readingReaders++; // (A)实际正在读取的线程数量加1}public synchronized void readUnlock() {readingReaders--; // (A)实际正在读取的线程数量减1preferWriter = true; //read处理后优先处理writenotifyAll();}public synchronized void writeLock() throws InterruptedException {waitingWriters++; // (B)正在等待写入的线程数量加1try {while (readingReaders > 0 || writingWriters > 0) {wait();}} finally {waitingWriters--; // (B)正在等待写入的线程数量减1}writingWriters++; // (C)实际正在写入的线程数量加1}public synchronized void writeUnlock() {writingWriters--; // (C)实际正在写入的线程数量减preferWriter = false; //write处理后优先处理readnotifyAll();} }
转载于:https://www.cnblogs.com/cxccbv/archive/2009/05/08/1452927.html
模式6--ReadWriteLock相关推荐
- 多线程并发之读写锁(ReentranReadWriteLockReadWriteLock)使用详解
[1]基本讲解与使用 ① ReadWriteLock同Lock一样也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个是只读的锁,一个是写锁. 读锁可以在没有写锁的时候被多个 ...
- 大淘宝服务端技术干货沉淀和总结
网络基础 TCP三次握手 三次握手过程 客户端--发送带有SYN标志的数据包--服务端 一次握手 Client进入syn_sent状态 服务端--发送带有SYN/ACK标志的数据包--客户端 二次握手 ...
- python 各种模块学习
from:https://blog.csdn.net/weiwangchao_/article/details/70570508 转载:.... Python的模块大全,很全,有详细介绍! 另外附Py ...
- 【高并发】ReadWriteLock怎么和缓存扯上关系了?!
作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能.自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验 ...
- C# 多线程并发锁模式-总结
开篇: 互斥还是lock Monitor Mutex 模式! Muex Monitor lock AutoEventSet ManualEventSet 后续的 ReaderWriterLock Re ...
- JUC系列(八)| 读写锁-ReadWriteLock
多线程一直Java开发中的难点,也是面试中的常客,趁着还有时间,打算巩固一下JUC方面知识,我想机会随处可见,但始终都是留给有准备的人的,希望我们都能加油!!! 沉下去,再浮上来,我想我们会变的不一样 ...
- java消费者模式_基于Java 生产者消费者模式(详细分析)
生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...
- 装饰者模式源码解析(spring-session mybatis jdk servlet)
那在JDK中体现最明显的,就是JAVA IO方面的一些类,那在JAVA IO中,我们为了增加缓存,我们使用BufferedReader,那现在我们来看一下,那因为增加缓存的功能,类有很多,子类也就需要 ...
- springboot工厂模式_最新整理138道阿里、快手等大厂面试题解析:基础+Spring+并发+JVM+设计模式+缓存...
这些题目都是阿里.百度.美团.快手等一线互联网公司面试被问到的题目.熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率,希望可以帮助大家,祝大家求职顺利! Java集合22题 ArrayList ...
- Java并发编程实战~Balking模式
上一篇文章中,我们提到可以用"多线程版本的 if"来理解 Guarded Suspension 模式,不同于单线程中的 if,这个"多线程版本的 if"是需要等 ...
最新文章
- java基础之集合类
- 【LeetCode】233. 数字1的个数
- 子元素相对于父元素垂直居中对齐
- 必须建筑师附体!像盖大楼那样打造数据即服务
- 《C++ primer》--第11章
- 联合主键三种实现方式
- 开发Adobe AIR移动应用程序的考虑事项
- 生成式模型(generative) vs 判别式模型(discriminative)
- Linux系统剪贴板getContents()非常之慢
- win10计算机管理被阻止,Win10家庭版安装程序提示系统管理员已阻止你运行此应用的解决办法...
- cad画钟表_如何在Word中画钟表?
- 读书笔记 | 4.3 基于征信系统的征信基础产品
- 在node中,中文转拼音排序
- uniapp onChooseAvatar,uniapp微信头像昵称填写,uniapp chooseAvatar,does not have a method “onChooseAvatar“
- 陈嘉哲:黄金原油跳水承压,日内或将延续,如何操作?附操作建议
- 8月31日下午3点半夏昕、林信良做客CSDN畅谈轻量级框架——Spring
- linux 16.04 安装与使用vscode试水
- android 加载gif 动画,GifView——Android显示GIF动画
- MicroPython-On-ESP8266——数码管的使用,从一个8段管开始
- 交通灯控制系统c语言编程,基于单片机的交通灯控制系统设计(本科)毕业论文设计.doc...