ReentrantLock

本文详细介绍了Java中的ReentrantLock,包括其可重入特性、实现原理(基于volatilestate和FIFO队列)、使用方法(lock(),unlock())以及公平锁与非公平锁的区别。

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

ReentrantLock是Java中的一个独占锁,也是一个可重入的锁。它表示当一个线程获得该锁并再次请求它时,该线程可以再次获得该锁。这种特性对于递归函数非常有用,因为递归函数需要多次获取同一把锁。

ReentrantLock的实现机制依赖于一个volatile变量state和一个线程FIFO队列。当state为0时,表示锁是可获取的,线程可以执行。当state不为0且请求锁的线程不是当前持有锁的线程时,该线程会被放入FIFO队列中并阻塞。当持有锁的线程释放锁后,会唤醒队列中的线程来竞争锁。

使用ReentrantLock时,通常需要创建一个ReentrantLock对象,然后在需要加锁的代码段之前调用lock()方法获取锁,并在finally块中调用unlock()方法释放锁。这样可以确保即使在发生异常的情况下,锁也能被正确释放,避免死锁的发生。

ReentrantLock也提供了公平锁和非公平锁两种创建策略。公平锁表示按照线程请求锁的顺序来分配锁,而非公平锁则不保证这种顺序。默认情况下,ReentrantLock创建的是非公平锁,但在构造函数中可以指定fair参数为true来创建公平锁。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值