05 读写锁

本文探讨了在Java中为何使用读写锁而非单纯的`synchronized`关键字进行并发控制。读写锁允许多个读线程同时访问资源,而写线程独占资源,从而提高效率。ReentrantReadWriteLock作为Java提供的读写锁实现,具备可重入、公平与非公平锁选择以及锁降级等特性。通过使用读写锁,开发者可以更好地优化多线程环境中的读写操作性能。
摘要由CSDN通过智能技术生成

1 为什么要使用读写锁,不使用synchronized

  • 使用synchronized

synchronized搭配等待通知机制完成并发控制(写操作开始的时候,所有晚于写操作的读操作都会进入等待状态),只有写操作完成并通知后才会将等待的线程唤醒继续执行。

  • 使用读写锁 

读写锁实现,只需要在读操作的时候获取读锁,写操作的时候获取写锁。当写锁被获取到的时候,后续操作(读写)都会被阻塞,只有在写锁释放之后才会执行后续操作。

2 ReentrantReadWriteLock

特点:

  • 具有与ReentrantLock类似的公平锁和非公平锁的实现

默认的支持非公平锁,对于二者而言,非公平锁的吞吐量由于公平锁

  • 支持重入

读线程获取读锁之后能够再次获取读锁,写线程获取写锁之后能再次获取写锁,也可以获取读锁。

  • 锁能降级

遵循获取写锁、获取读锁在释放写锁的顺序,即写锁能够降级为读锁

3 ReadWriteLock接口

public interface ReadWriteLock {
    /**
     * 返回读锁
     */
    Lock readLock();

    /**
     * 返回写锁
     */
    Lock writeLock();
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值