`
wx1568908808
  • 浏览: 31441 次
文章分类
社区版块
存档分类
最新评论

ReentrantReadWriteLock学习

 
阅读更多

ReentrantReadWriteLock是Lock的另一种实现方式,我们知道ReentrantLock是一个排他锁,同一时间只允许一个线程访问,而ReentrantReadWriteLock允许多个读线程同时访问,但不允许写线程和读线程、写线程和写线程同时访问。相对于排他锁,提高了并发性。在实际应用中,大部分情况下对共享数据(如缓存)的访问都是读操作远多于写操作,这时ReentrantReadWriteLock能够提供比排他锁更好的并发性和吞吐量。

class RWDictionary {
     private final Map<String, Data> m = new TreeMap<String, Data>();
      private final ReentrantReadWriteLock rwl = new ReentrantReadWriteLock();
      private final Lock r = rwl.readLock();    //读锁
      private final Lock w = rwl.writeLock();    //写锁
  
      public Data get(String key) {
          r.lock();
          try { return m.get(key); }
         finally { r.unlock(); }
     }
     public String[] allKeys() {
         r.lock();
         try { return m.keySet().toArray(); }
         finally { r.unlock(); }
     }
     public Data put(String key, Data value) {
         w.lock();
         try { return m.put(key, value); }
         finally { w.unlock(); }
     }
     public void clear() {
         w.lock();
         try { m.clear(); }
         finally { w.unlock(); }
     }
 }

转载于:https://my.oschina.net/u/3734816/blog/3060090

分享到:
评论

相关推荐

    60.Lock-ReentranLock-ReentrantReadWriteLock.mp4

    在学习Java过程中,自己收集了很多的Java的学习资料,分享给大家,有需要的欢迎下载,希望对大家有用,一起学习,一起进步。

    Java分布式应用学习笔记06浅谈并发加锁机制分析

    ### Java分布式应用学习笔记06浅谈并发加锁机制分析 #### 1. 前言 在深入探讨Java中的并发加锁机制之前,我们有必要回顾一下多线程环境下的一些基本概念和技术。之前的多线程调度、并发调度以及线程加锁安全等内容...

    contention-profiling:ReentrantLock 和 ReentrantReadWriteLock 上的配置文件争用

    在Java编程语言中,线程安全是多线程应用程序中至关重要的一个...`contention-profiling-master`这个项目很可能是用来演示如何进行此类分析的一个实例,通过学习和应用,我们可以更好地调试和优化我们的Java并发代码。

    java学习内容[文].pdf

    4. 并发包:分析java.util.concurrent中的并发工具类,如ConcurrentHashMap、ThreadPoolExecutor、FutureTask、Semaphore、Condition、ReentrantReadWriteLock等。 5. JVM:深入理解JVM的工作机制,包括代码的编译、...

    java学习内容[归类].pdf

    在并发处理方面,学习java.util.concurrent包,例如ConcurrentHashMap、ThreadPoolExecutor、FutureTask、Semaphore、Condition和ReentrantReadWriteLock等,以及JVM并发机制的演进。 **Java进阶主题** 递归是解决...

    并发编程,学习手记.pdf

    【并发编程】是计算机科学中的一个关键领域,...学习并发编程不仅需要掌握理论知识,还需要实践经验和对各种工具的熟练运用。通过阅读文档、编写测试案例以及参考各种在线资源,可以不断深化对并发编程的理解和应用。

    JUC知识点总结(三)ReentrantLock与ReentrantReadWriteLock源码解析

    8. Lock接口 (ReentrantLock 可重入锁) 特性 ReentantLock 继承接口 Lock 并实现了接口中定义的方法, 它是一种可重入锁, 除了能完成 synchronized 所能完成的所有工作外,还提供了诸如可响应中断锁、可轮询锁...

    深入学习Java同步机制中的底层实现

    通过学习AQS,开发者不仅能够理解`ReentrantLock`和`CountDownLatch`的工作方式,还能进一步掌握如`ReentrantReadWriteLock`(读写锁)、`Semaphore`(信号量)等其他同步工具的实现原理。掌握AQS的使用,意味着具备了...

    java学习内容.pdf

    并发包:`java.util.concurrent`提供了线程安全的数据结构和同步工具,如`ConcurrentHashMap`、`FutureTask`、`Semaphore`、`Condition`和`ReentrantReadWriteLock`。 JVM:理解JVM的内存管理,包括堆、栈、方法区...

    homework-ReadWriteLock-KristampsW-main.zip

    通过对`ReadWriteLock`的源码学习,我们可以更好地理解和定制自己的并发控制策略,优化多线程环境下的程序性能。在阅读源码时,重点关注锁的获取、释放逻辑,以及AQS的使用,这将有助于我们深入理解Java并发编程的...

    图灵Java高级互联网架构师第6期并发编程专题笔记.zip

    内容包括 01-并发编程之深入理解JMM&并发三大特性(一)-fox 02-并发编程之深入理解JMM&并发三...11-深入理解AQS之CyclicBarrier&ReentrantReadWriteLock详解-fox 12-深入理解AQS之ReentrantReadWriteLock详解-fox ...

    Java并发编程学习笔记

    4. **ReentrantReadWriteLock**: 读写锁允许多个读线程同时访问资源,但在写操作时会独占资源。这种锁提高了并发性能,因为它允许同时进行多个读操作。 5. **并发工具类**: 包括CountDownLatch、CyclicBarrier...

    Java 多线程学习总结6

    在“Java多线程学习总结6”这个主题中,我们可以深入探讨Java多线程的实现、管理及优化。下面将详细阐述相关知识点。 1. **线程的创建方式** - **继承Thread类**:自定义类继承Thread类,并重写run()方法,创建...

    读者写者问题java源代码

    读者写者问题是一个经典的多线程同步问题,它在计算机科学和操作系统领域有着重要的地位。这个问题的场景是:多个...在进行操作系统实验报告或多线程学习时,理解并实现这个经典问题有助于深入理解并发控制和线程同步。

    java进阶提高学习教程-14锁机制.pptx

    Java 中的 ReentrantReadWriteLock 类是 ReadWriteLock 接口的实现类。 CAS CAS 是 Compare And Swap,即比较和交换。CAS 使用一个期望值与一个变量的当前值比较,如果当前变量的值与期望值相等,则用一个新值来...

    完整word版-北航研究生课程程序设计语言原理16-17期末试题.doc

    综上所述,通过以上三个部分的详细介绍,我们不仅了解了如何使用EBNF描述Python3的语法结构,还掌握了如何使用Java语言解决读者-写者问题的方法,并学习了如何在IMP语言中增加条件表达式和数组变量类型的具体实现。...

    读写线程模仿

    在IT行业中,线程同步和通信是多线程编程中的重要概念,特别是在Java语言中。"读写线程模仿"这个主题聚焦于如何在多...通过学习和理解这些代码,开发者可以更好地掌握在多线程环境中如何高效、安全地管理数据读写操作。

    JUC并发编程与源码分析视频课.zip

    9. **锁的高级特性**:包括读写锁(ReentrantReadWriteLock)、乐观锁(StampedLock)以及锁的可重入性、公平性和非公平性等概念。 10. **源码分析**:通过对JUC库中部分关键类的源码分析,帮助学员深入理解并发...

Global site tag (gtag.js) - Google Analytics