synchronized和reentrantlock之间的区别

简介: synchronized和reentrantlock之间的区别

相同点:

synchronized 和 ReentrantLock 都是 Java 中提供的可重入锁


不同点:

用法不同:synchronized 可以用来修饰普通方法、静态方法和代码块;ReentrantLock 只能用于代码块;

synchronized退出代码块就自动释放锁,reentrantlock必须手动加锁,手动释放锁,注意要用try-finally处理加锁和释放锁的代码

synchronized只支持非公平锁,reentrantlock支公平锁,也支持非公平锁,通过构造方法的参数指定

ReentrantLock可以根据不同的条件进行唤醒和休眠

synchronized在申请锁失败时,会一直等待锁资源,ReentrantLock可以通过trylock()等待一段时间就放弃

synchronized是JVM对锁的实现,最终通过调用cpu的加锁指令,ReentrantLock是java层面的JUC包中的一组实现类(底层实现不同:synchronized 是 JVM 层面通过监视器实现的;ReentrantLock 是基于 AQS 实现的。)


相关文章
|
2月前
|
存储 Java 程序员
synchronized的原理以及与ReentrantLock的区别
`synchronized`和`ReentrantLock`均为Java线程同步机制,确保共享资源的单一时刻独占访问。`synchronized`关键字直接嵌入JVM,可通过修饰方法或代码块实现对象锁或监视器锁,具备可重入性,依赖Mark Word进行锁状态管理。`ReentrantLock`则需显式调用`lock()`和`unlock()`,提供更灵活控制,如公平锁、尝试锁及条件变量。两者在语法、灵活性和异常处理上有所差异,但均支持可重入性。性能方面,随JDK优化,`synchronized`在某些场景下甚至优于`ReentrantLock`。选择使用哪个取决于具体需求和上下文。
|
3月前
|
安全 Java 开发者
Java多线程:synchronized关键字和ReentrantLock的区别,为什么我们可能需要使用ReentrantLock而不是synchronized?
Java多线程:synchronized关键字和ReentrantLock的区别,为什么我们可能需要使用ReentrantLock而不是synchronized?
45 0
|
5月前
|
存储 安全 Java
Synchronized锁工作原理
Synchronized锁工作原理
|
5月前
|
安全 Java 程序员
synchronized关键字与ReentrantLock的区别和应用
synchronized关键字与ReentrantLock的区别和应用
33 0
|
5月前
|
存储 安全 Java
synchronized 与多线程的哪些关系
synchronized 与多线程的哪些关系
42 0
|
5月前
synchronized与ReentrantLock区别与联系
synchronized与ReentrantLock区别与联系
36 0
|
12月前
|
Java 程序员
在Synchronized和ReentrantLock之间选择
在Synchronized和ReentrantLock之间选择
37 0
|
程序员
ReentrantLock与synchronized的区别
ReentrantLock与synchronized的区别
|
Java API 调度
synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别
synchronized 和 ReentrantLock 的实现原理是什么?它们有什么区别
74 0
|
Java
Synchronized 和 Lock 的区别和使用场景
并发编程中,锁是经常需要用到的,今天我们一起来看下Java中的锁机制:synchronized和lock。
659 0