读写锁ReentrantReadWriteLock&StampLock详解

现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁(读多写少)。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以应该允许多个线程同时读取共享资源(读读共享);但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写操作了(读写,写写互斥)。思考:针对这种场景,有没有比ReentrantLock更好的方案?读写锁ReadWriteLock,顾名思义一把锁分为读与写两部分,读锁允许多个线程同时获得,因为读操作本身是线程安全的。而写锁是互斥锁,不允许多个线程同时获得写锁。并且读与写操作也是互斥的。读写锁适合多读少写的业务场景。针对这种场景,JAVA的并发包提供了读写锁ReentrantReadWriteLock,它内部,维护了一对相关的锁,一个用于只读操作,称为读锁;一个用于写入操作,称为写锁,描述如下:线程进入读锁的前提条件:线程进入写锁的前提条件:而读写锁有以下三个重要的特性:https://note.youdao.com/s/Sy9cmgPx1. 读写锁介绍2. ReentrantReadWriteLock介绍没有其他线程的写锁没有写请求或者有写请求,但调用线程和持有锁的线程是同一个。没有其他线程的读锁没有其他线程的写锁公平选择性:支持非公平(默认)和公平的锁获取方式,吞吐量还是非公平优于公平。可重入:读锁和写锁都支持线程重入。以读写线程为例:读线程获取读锁后,能够再次获取读锁。写线程在获取一对方法,分别获得读锁和写锁 Lock 对象。ReentrantReadWriteLock是可重入的读写锁实现类。在它内部,维护了一对相关的锁,一个用于只读操作,另一个用于写入操作。只要没有 Writer 线程,读锁可以由多个 Reader 线程同时持有。也就是说,写锁是独占的,读锁是共享的。写锁之后能够再次获取写锁,同时也可以获取读锁。锁降级:遵循获取写锁、再获取读锁最后释放写锁的次序,写锁能够降级成为读锁。

相关推荐

  1. ReentrantReadWriteLock&StampLock详解

    2024-04-28 18:04:01       13 阅读
  2. C++

    2024-04-28 18:04:01       22 阅读
  3. ReentrantReadWriteLock&StampLock详解与实践实例

    2024-04-28 18:04:01       30 阅读
  4. 关于Redission

    2024-04-28 18:04:01       16 阅读
  5. 乐观、悲观、互斥

    2024-04-28 18:04:01       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-28 18:04:01       19 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-28 18:04:01       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-28 18:04:01       19 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-28 18:04:01       20 阅读

热门阅读

  1. TS中const和readonly的区别

    2024-04-28 18:04:01       12 阅读
  2. vmware workstation 17 pro密钥最新大全

    2024-04-28 18:04:01       12 阅读
  3. Python 内置函数 float() 详解

    2024-04-28 18:04:01       13 阅读
  4. 大模型日报2024-04-27

    2024-04-28 18:04:01       10 阅读