Java多线程并发的可重入锁ReentrantLock

本文详细介绍了Java中的可重入锁ReentrantLock,它是独占锁的一种,支持公平/非公平模式。ReentrantLock提供了比synchronized更灵活的锁获取和释放方式,通过Lock接口实现,具备可重入特性。文章分析了ReentrantLock的四要素、非公平和公平模式的实现,并通过三个示例展示了其用法和可重入特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可重入锁

Java中的可重入锁(ReentrantLock)是用于控制并发的一种工具,它的功能类似于Java内置的Synchronized语法。可重入锁是指一个线程可以多次对某个锁进行加锁操作,比如程序在多层调用中多次使用锁。而对于不可重入锁来说,进行两次以及上的加锁会导致死锁的产生。

ReentrantLock是一种独占锁,在独占模式下线程只能逐一使用锁,即任意时刻仅仅只能有一条线程持有锁。如下图,线程一首先成功调用lock方法进行加锁操作从而持有该锁,其它两个线程只能等待线程一释放锁。因为锁是可重入的,所以线程一可多次调用lock方法对锁进行加锁操作。当线程一调用unlock方法释放锁后,线程二调用lock方法成功获得锁。接着线程二也调用unlock方法释放锁,然后线程三调用lock方法成功获得锁,并且其也可以多次调用lock方法对该锁进行加锁操作。

可重入锁

四要素

ReentrantLock类的四要素为:公平/非公平模式、lock方法、unlock方法以及newCondition方法。公平/非公平模式表示多个线程同时去获取锁时是否按照先到先得的顺序获得锁,如果是则为公平模式,否则为非公平模式。lock方法用于获取锁,假如锁已被其它线程占有则进入等待状态。unlock方法用于释放锁。newCondition方法用于返回一个新创建的Condition对象,这个对象支持线程的阻塞和唤醒功能,每个Condition对象内部都有一个等待队列

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

超人汪小建(seaboat)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值