八股训练营第 34 天 | synchronized 和 Lock 的区别是什么?synchronized 和 ReentrantLock 的区别是什么?

synchronized 和 Lock 的区别是什么?

  1. synchronized 和 Lock 都是 Java 中用于实现线程同步的手段。synchronized 是 Java 中的一个关键字,基于 JVM 的内置锁实现,可以作用在方法或代码块上,使用起来比较简单直接。Lock 是一个接口,是 Java 提供的显示锁机制,需要手动地进行锁的获取和释放。通过实现类(如 ReentrantLock 类)创建锁对象,然后主动调用锁对象的获取和释放方法。
  2. 功能特性:
    • synchronized 的灵活性较低,只能作用于方法或代码块。synchronized 方法一旦执行,即使线程被阻塞,也不能中断。synchronized 没有超时机制,获取锁失败就要一直等待。synchronized 只有非公平锁实现,线程的调度由 JVM 控制。
    • Lock 的灵活性高。如果获取锁失败可以选择继续等待还是中断等待。具有超时机制,可以在指定时间内尝试获取锁。可以设置为公平锁,按照申请锁的顺序获得锁。
  3. 等待和通知:
    • synchronized 可以与 wait() 和 notify() / notifyAll() 方法一起使用来实现线程等待和通知机制。
    • Lock 可以与 Condition 接口配合使用,以实现更细粒度的线程等待和通知机制。
  4. 使用场景:
    • synchronized 使用简单,适用于竞争不激烈、锁的粒度较小,实现简单的场景。
    • Lock 提供了更多的灵活性和控制能力,适用于竞争激烈、需要复杂同步控制的场景。

synchronized 和 ReentrantLock 的区别是什么?

  1. synchronized 和 ReentrantLock 都是 Java 中用于实现线程同步的手段。synchronized 是 Java 中的一个关键字,基于 JVM 的内置锁实现,可以作用在方法或代码块上,使用起来比较简单直接。ReentrantLock 是 java.util.concurrent.locks 包下的一个锁实现,需要显示创建,然后通过 lock() 和 unlock() 方法来管理锁的获取和释放。
  2. 功能特性:
    • synchronized 的灵活性较低,只能作用于方法或代码块。synchronized 方法一旦执行,即使线程被阻塞,也不能中断。synchronized 没有超时机制,获取锁失败就要一直等待。synchronized 只有非公平锁实现,线程的调度由 JVM 控制。
    • ReentrantLock 的灵活性高。如果获取锁失败可以选择继续等待还是中断等待。具有超时机制,可以通过 tryLock() 方法在指定时间内尝试获取锁。可以设置为公平锁,按照申请锁的顺序获得锁。提供了 isLocked()、isFair() 方法来检查锁的状态。
  3. 等待和通知:
    • synchronized 可以与 wait() 和 notify() / notifyAll() 方法一起使用来实现线程等待和通知机制。
    • ReentrantLock 可以与 Condition 接口配合使用,以实现更细粒度的线程等待和通知机制。
  4. 使用场景:
    • synchronized 使用简单,适用于竞争不激烈、锁的粒度较小,实现简单的场景。
    • ReentrantLock 提供了更多的灵活性和控制能力,适用于竞争激烈、需要复杂同步控制的场景。
相关推荐
风流 少年7 分钟前
Spring AI 2.0:Flux
java·人工智能·spring
m0_5474866610 分钟前
《面向对象与Java程序设计》全套PPT课件2026
java·开发语言
jason成都23 分钟前
ignav-next|Java 层封装 GNSS/INS 组合导航框架,隔离 RTKLIB 与 INS 内核,双模块独立演进、最小侵入
java·开发语言
抓不住时间的沙23 分钟前
butterfly主题美化,打造属于自己的个性博客
java·开发语言·前端·javascript·node.js·github
Zane199434 分钟前
从一个发短信的类到多态调用:封装、继承、多态到底是怎么长出来的
java·后端
MarkHD37 分钟前
Stable Diffusion入门第19-20天:保存与分享你的工作流——第一阶段收官,从“能用”到“可复用”
java·开发语言·stable diffusion
爱敲键盘的猴子41 分钟前
Spring MVC 详解(一):全注解开发与请求响应处理
java·spring·mvc
counting money1 小时前
SpringBoot 项目创建(IDEA不全,还需要修改)
java·spring boot·spring·maven
Dr.kangder1 小时前
嵌入式面试总结(二十二)——指针
java·面试·职场和发展·架构·嵌入式
MacroZheng1 小时前
几行代码给项目集成AI功能,Spring AI 2.0太香了!
java·人工智能·spring boot