zoukankan      html  css  js  c++  java
  • Java 多线程 ReadWriteLock

      ReadWriteLock是JDK 1.5提供的读写分离锁,可以减少锁竞争。例如,线程A1、A2和A3进行写操作,线程B1、B2和B3进行读操作,如果使用重入锁或者内部锁,那么理论上所有读之间、读与写之间和写之间都是串行操作。当B1执行读操作时,B2和B3需要等待。因为读操作不会破坏数据的完整性,所以这种等待是不合理的,读写锁解决了这个问题。在并发情况下,读写锁允许多个线程同时读,使B1、B2和B3真正并行。但是考虑到数据完整性,写操作之间和读写操作之间需要等待。

      读写锁的访问约束情况如下:

      排他锁指同一时刻只允许一个线程访问,而读写锁不是排他锁,在同一时刻可以允许多个读线程访问,但是写线程访问时所有的读线程和其他写线程均被阻塞。读写锁维护了一对锁,即一个读锁和一个写锁。通常读写锁性能比排他锁好,因为大多数场景读多于写。如果读远远多于写,那么读写锁作用最明显。

      Java并发包提供的读写锁实现是ReentrantReadWriteLock,特性如下:

      ReadWriteLock仅定义了获取读锁和写锁的两个方法,即readLock()和writeLock()。而ReentrantReadWriteLock除了实现接口方法外,还提供了一些外界监控内部工作状态的方法,方法名称和描述如下:

      

      参考资料

      《实战Java高并发程序设计》 P85-87

      《Java并发编程的艺术》 5.4.1 读写锁的接口与示例

  • 相关阅读:
    发布时间 sql语句
    Excel中 查找重复数据
    身份证正则表达式
    (转)C#中的委托与事件
    C#中的ForEach
    Ajax请求中,contentType和dataType的区别
    让IIS支持PUT和Delete请求的方法
    Vue.js事件修饰符
    JS阻止默认行为
    关于bindinglist的一点小问题
  • 原文地址:https://www.cnblogs.com/WJQ2017/p/8278685.html
Copyright © 2011-2022 走看看