ReentrantLock
翻译:可重入锁
特点
- 可中断
- 可设置超时时间(不会一直等待锁)
- 可设置为公平锁(防止线程饥饿)
- 支持多个条件变量
- 与 synchronized 一样可重入
基本语法
// 获取锁
reentrantLock.lock();
try {
// 临界区
} finally {
// 释放锁
reentrantLock.unlock();
}
可重入
同一个线程如果已经拥有了锁,可以再次获得这把锁。
@Slf4j(topic = "c.Test3")
public class st3 {
private static ReentrantLock lock = new ReentrantLock();
public static void main(String[] args) throws InterruptedException {
lock.lock(); // 加锁
try {
log.debug("enter m1");
m1();
}finally {
lock.unlock(); // 解锁
}
}
public static void m1 () {
lock.lock();
try {
log.debug("enter m2");
m2();
} finally {
lock.unlock();
}
}
public static void m2 () {
lock.lock();
try {
log.debug("m2获取了锁");
} finally {
lock.unlock();
}
}
}

可打断(避免死等、被动)
lockInterruptibly 可打断锁,在尝试获取锁进入阻塞队列中,被打断时,可以停止等待锁。
public static void main(String[] args) throws InterruptedException {
ReentrantLock lock = new ReentrantLock();
Thread t1

本文详细介绍了JavaReentrantLock的可重入、可打断、锁超时特性,以及公平锁的概念,并通过实例展示了如何使用多个条件变量解决并发问题,与synchronized进行对比。
最低0.47元/天 解锁文章
273

被折叠的 条评论
为什么被折叠?



