ReenTrantLock之读写锁

ReenTrantLock之读写锁

上几篇我们介绍了多线程同步相关锁Synchronsize锁和JDK的JUC锁Lock以及ReentrantLock锁。现在准备介绍的时JDK的读写锁(测试代码借用别人的博客,我这边只做一个总结)。

先介绍下这个读写锁 ReentrantReadWriteLock

这个读写锁也是JDK工具java.util.concurrent.locks包下,和ReentrantLock 不同的是ReentrantLock是继承了Lock,ReentrantReadWriteLock继承是ReadWriteLock。

大家都知道多线程同步加锁会大大影响效率,所以在JDK中提供了一种读写锁ReentrantReadWriteLock类,使用它可以加快运行效率,在某些不需要操作实例变量的方法中,完全可以使用读写锁ReentrantReadLock来提升该方法的代码运行速度。
读写锁分为读锁 和 写锁:

private ReentrantReadWriteLock lock =  new ReentrantReadWriteLock()
 lock.readLock().lock(); // 读锁
 lock.writeLock().lock();// 写锁

怎么理解呢?

读锁: 一般用于无共享资源操作的业务程序中,只对资源进行读,而不进行写操作。这样对于共享资源而言就不会存在线程不安全问题。所以为了多个线程能够高效的读取到资源,读锁将允许多个线程获取锁访问资源信息。

写锁: 一般用于有共享资源操作的业务程序中,由于写操作可能会造成线程不安全,所以不应当让多个线程同时拿到锁,需要有排他锁机制处理。因此读锁就属于独占锁,必须等上一个线程结束才能由其他线程取锁。

由此可知:
如果线程内存在多锁操作时:

1. 读--读锁 : 因为读锁允许同时拿锁,所以这里为线程不会互斥,都能快了的读取资源。
2. 读-写 | 写-读 锁:由于你存在了写操作,所有当线程拿到锁时,必须等线程释放锁才能由其他线程取锁。此处为互斥。
3. 写写锁 : 这里很容易理解为互斥。

代码测试:https://blog.csdn.net/ligh_sqh/article/details/95178457(转发)

猜你喜欢

转载自blog.csdn.net/qq_31142237/article/details/115143090