来至《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相关推荐

  1. 多线程并发之读写锁(ReentranReadWriteLockReadWriteLock)使用详解

    [1]基本讲解与使用 ① ReadWriteLock同Lock一样也是一个接口,提供了readLock和writeLock两种锁的操作机制,一个是只读的锁,一个是写锁. 读锁可以在没有写锁的时候被多个 ...

  2. 大淘宝服务端技术干货沉淀和总结

    网络基础 TCP三次握手 三次握手过程 客户端--发送带有SYN标志的数据包--服务端 一次握手 Client进入syn_sent状态 服务端--发送带有SYN/ACK标志的数据包--客户端 二次握手 ...

  3. python 各种模块学习

    from:https://blog.csdn.net/weiwangchao_/article/details/70570508 转载:.... Python的模块大全,很全,有详细介绍! 另外附Py ...

  4. 【高并发】ReadWriteLock怎么和缓存扯上关系了?!

    作者个人研发的在高并发场景下,提供的简单.稳定.可扩展的延迟消息队列框架,具有精准的定时任务和延迟队列处理功能.自开源半年多以来,已成功为十几家中小型企业提供了精准定时调度方案,经受住了生产环境的考验 ...

  5. C# 多线程并发锁模式-总结

    开篇: 互斥还是lock Monitor Mutex 模式! Muex Monitor lock AutoEventSet ManualEventSet 后续的 ReaderWriterLock Re ...

  6. JUC系列(八)| 读写锁-ReadWriteLock

    多线程一直Java开发中的难点,也是面试中的常客,趁着还有时间,打算巩固一下JUC方面知识,我想机会随处可见,但始终都是留给有准备的人的,希望我们都能加油!!! 沉下去,再浮上来,我想我们会变的不一样 ...

  7. java消费者模式_基于Java 生产者消费者模式(详细分析)

    生产者消费者模式是多线程中最为常见的模式:生产者线程(一个或多个)生成面包放进篮子里(集合或数组),同时,消费者线程(一个或多个)从篮子里(集合或数组)取出面包消耗.虽然它们任务不同,但处理的资源是相 ...

  8. 装饰者模式源码解析(spring-session mybatis jdk servlet)

    那在JDK中体现最明显的,就是JAVA IO方面的一些类,那在JAVA IO中,我们为了增加缓存,我们使用BufferedReader,那现在我们来看一下,那因为增加缓存的功能,类有很多,子类也就需要 ...

  9. springboot工厂模式_最新整理138道阿里、快手等大厂面试题解析:基础+Spring+并发+JVM+设计模式+缓存...

    这些题目都是阿里.百度.美团.快手等一线互联网公司面试被问到的题目.熟悉本文中列出的知识点会大大增加通过前两轮技术面试的几率,希望可以帮助大家,祝大家求职顺利! Java集合22题 ArrayList ...

  10. Java并发编程实战~Balking模式

    上一篇文章中,我们提到可以用"多线程版本的 if"来理解 Guarded Suspension 模式,不同于单线程中的 if,这个"多线程版本的 if"是需要等 ...

最新文章

  1. java基础之集合类
  2. 【LeetCode】233. 数字1的个数
  3. 子元素相对于父元素垂直居中对齐
  4. 必须建筑师附体!像盖大楼那样打造数据即服务
  5. 《C++ primer》--第11章
  6. 联合主键三种实现方式
  7. 开发Adobe AIR移动应用程序的考虑事项
  8. 生成式模型(generative) vs 判别式模型(discriminative)
  9. Linux系统剪贴板getContents()非常之慢
  10. win10计算机管理被阻止,Win10家庭版安装程序提示系统管理员已阻止你运行此应用的解决办法...
  11. cad画钟表_如何在Word中画钟表?
  12. 读书笔记 | 4.3 基于征信系统的征信基础产品
  13. 在node中,中文转拼音排序
  14. uniapp onChooseAvatar,uniapp微信头像昵称填写,uniapp chooseAvatar,does not have a method “onChooseAvatar“
  15. 陈嘉哲:黄金原油跳水承压,日内或将延续,如何操作?附操作建议
  16. 8月31日下午3点半夏昕、林信良做客CSDN畅谈轻量级框架——Spring
  17. linux 16.04 安装与使用vscode试水
  18. android 加载gif 动画,GifView——Android显示GIF动画
  19. MicroPython-On-ESP8266——数码管的使用,从一个8段管开始
  20. 交通灯控制系统c语言编程,基于单片机的交通灯控制系统设计(本科)毕业论文设计.doc...

热门文章

  1. 手动将web项目的class文件打成jar包,手动打jar包,java -cvf,IDE打包底层指令
  2. 【Golang源码分析】Go Web常用程序包gorilla/mux的使用与源码简析
  3. Python gRPC 安装
  4. 数据结构(06)— 线性循环链表实战
  5. Go 学习笔记(56)— Go 第三方库 sqlx (操作数据库)
  6. 经常使用的npm命令
  7. SpringCloud Alibaba微服务实战(四) - Nacos Config 配置中心
  8. 文本框可编辑查看页面
  9. pytorch numpy 数据类型转换
  10. Google Colab 免费GPU服务器使用教程 挂载云端硬盘