模型服务连接失败

synchronized 和 ReentrantLock 有什么区别?

并发JavaJava 并发
分类
Java 并发
难度
未设置
来源数
1
更新时间
2026/03/28 21:25

答案

1. synchronized和reentrantlock都是可重入锁。 2. synchronized依赖于jvm来实现,而reentrantlock是jdk层面的实现,需要使用lock和unlock方法配合try/finally来完成加锁和释放锁操作。 3. reentrantlock比synchronized多了一些高级操作: 1. 公平锁和非公平锁:reentrantlock可以通过构造方法指定是非公平锁还是公平锁,而synchronized只能是非公平锁。 2. 等待可中断:reentrantlock可以通过lock.lockInterruptilby()来实现中断等待所的线程,就是说正在等待的线程可以放弃等待,去做别的事。 3. 选择性通知:reentrantlock可以通过Condition接口和newCondition方法来实现选择性通知。多个线程对象可以注册到指定的condition当中,从而有选择的进行线程通知。而notify/notifyAll则是由jvm选择通知的线程。

相关题目(5)

Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发

元信息

审核状态: active
关联来源: 1

来源面经题(0)

这道题目前没有手动沉淀的面经题来源。

来源(1)

Java八股(并发).md

knowledge_note
Question 56: synchronized 和 ReentrantLock 有什么区别? Source answer: 1. synchronized和reentrantlock都是可重入锁。 2. synchronized依赖于jvm来实现,而reentrantlock是jdk层面的实现,需要使用lock和unlock方法配合try/finally来完成加锁和释放锁操作。 3. reentrantlock比synchronized多了一些高级操作: 1. 公平锁和非公平锁:reentrantlock可以通过构造方法指定是非公平锁还是公平锁,而synchronized只能是非公平锁。 2. 等待可中断:reentrantlock可以通过lock.lockInterruptilby()来实现中断等待所的线程,就是说正在等待的线程可以放弃等待,去做别的事。 3. 选择性通知:reentrantlock可以通过Condition接口和newCondition方法来实现选择性通知。多个线程对象可以注册到指定的condition当中,从而有选择的进行线程通知。而notify/notifyAll则是由jvm选择通知的线程。 Reviewed answer: 二者都是可重入锁。synchronized 由 JVM 层面实现,使用更简单;ReentrantLock 属于 JDK 显式锁,需要手动 lock/unlock,通常配合 try/finally。ReentrantLock 额外支持公平锁、可中断等待和 Condition 选择性通知等高级特性。