【多线程学习】读写锁

「这是我参与11月更文挑战的第19天,活动详情查看:2021最后一次更文挑战

读写锁ReentrantReadWriteLock是Lock的另一种实现方式,内部维护了两个锁,一个用于读操作,一个用于写操作

  1. 读取锁 用于只读操作,它是 共享锁,能同时被多个线程获取

  2. 写入锁 用于写入操作,它是独占锁,写入锁只能被一个线程锁获取

但是有一点需要注意,不能同时存在读取锁和写入锁

同一时刻允许多个读线程同时访问,但是写线程访问的时候,所有的读和写都被阻塞,最适宜与读多写少的情况,我们可以知道读写锁,最常用的就是读多写少的场景,读写锁相比于普通的排它锁,提高了很高的读取性能

自定义一个缓存,向里面读写数据,使用多个线程同时去写和同时去读,在不加任何锁的情况下查看结果会是什么样

开启多个线程同时读,想让它写的时候只允许有一个写的操作,等待上一个写完了才会有下一个,读不受限制

首先自定义一个缓存

image.png

在进行读写操作

image.png

查看运行结果

image.png

从运行结果看到,在线程2进行写入操作的时候线程4从半路中出来进行写入,现在就给读写操作在加上一个细粒度更加好的读写锁,读取的时候所以人都可以读,可以提高程序响应速度

正常情况下,现在就会是一个线程写完OK,下一个线程在继续写,依次进行

image.png

加上了读写锁,再次运行程序查看运行结果

image.png

由这个demo也可以知道读写锁的应用场景一般可以用于缓存设计

Guess you like

Origin juejin.im/post/7032592809165062158
Recommended