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 Server 2005 中的同义词
    SQL SERVER 2005中同义词实例
    聚集索引和非聚集索引(整理)
    linux kernel中timer的使用
    linux命令: patch
    win7(64位)php5.5-Apache2.4-mysql5.6环境安装
    tasklet和工作队列
    linux串口编程(c)
    Notepad++中Windows,Unix,Mac三种格式
    centos7/redhat7 将网卡名字改成eth样式的方法
  • 原文地址:https://www.cnblogs.com/WJQ2017/p/8278685.html
Copyright © 2011-2022 走看看