Lock和Synchronized的区别,源码分析

news/2025/1/24 11:00:40/

LockSynchronized_0">LockSynchronized的区别,源码分析

探究Lock锁(指实现Lock接口的锁,比如是ReentrantLock锁)与Synchronized的区别。

在这里插入图片描述

以上区别都体现在Lock接口里定义的方法,以及实现Lock接口的类(比如ReentrantLock)重写这些方法的逻辑上。

  • Lock接口里定义的抽象方法

    在这里插入图片描述

  • ReentrantLock类实现Lock接口重写上面这些方法,重写方法里主要调用的都是AQS里方法。所以我们想要分析Lock接口的特性可以参照AQS对应方法进行分析。

    • lock():

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

    • lockInterruptibly():

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

    • tryLock():

      在这里插入图片描述

      在这里插入图片描述

      在这里插入图片描述

因此我们可以总结出synchronized和lock的区别:

  • 用法上分析:

1、synchronized锁是隐式锁,由jvm帮我们加锁释放锁;而Lock锁是显式的加锁和释放锁。所以synchronized锁更加便捷,但是因为它加锁和释放锁是固定的,因此Lock锁的会更加灵活。

  • 功能上分析:

2、Lock锁支持中断,获取锁失败等待重新获取锁的线程如果被中断,会抛出异常,并且返回。而synchronized是如果线程获取锁失败会一直被阻塞,等待获取锁。

3、Lock锁支持在等待重新获取锁过程中如果超过指定时间,则直接返回。这样可以避免死锁问题。而synchronized没有这样的功能。

4、Lock锁支持公平锁,比如ReentrantLock就实现了公平锁。而synchronized只有非公平锁。

适用场景:

1、synchronized适用于简单的需要加锁的逻辑中,而Lock适用于比较复杂的代码中。

2、如果有需要中断、保证公平的情景下应该选用Lock锁。

的需要加锁的逻辑中,而Lock适用于比较复杂的代码中。

2、如果有需要中断、保证公平的情景下应该选用Lock锁。


http://www.ppmy.cn/news/1565765.html

相关文章

Azure学生订阅上手实操:在Ubuntu VPS上利用Docker快速部署PostgreSQL数据库

引言 本文将详细指导您如何在Azure 100学生订阅中,利用Ubuntu虚拟机,通过Docker容器技术快速搭建PostgreSQL数据库。我们将从Docker和PostgreSQL的基础知识入手,逐步讲解部署过程中的每一个步骤,并提供完整的命令和配置文件示例。…

冯诺依曼架构和哈佛架构的主要区别?

冯诺依曼架构(Von Neumann Architecture)和哈佛架构(Harvard Architecture)是两种计算机体系结构,它们在存储器组织、指令处理和数据存取等方面有明显的不同。以下是它们的主要区别: 1.存储器结构 冯诺依曼…

AI如何帮助解决生活中的琐碎难题?

引言:AI已经融入我们的日常生活 你有没有遇到过这样的情况——早上匆忙出门却忘了带钥匙,到了公司才想起昨天的会议资料没有打印,或者下班回家还在纠结晚饭吃什么?这些看似微不足道的小事,往往让人疲惫不堪。而如今&a…

【R语言】数学运算

一、基础运算 R语言中能实现加、减、乘、除、求模、取整、取绝对值、指数、对数等运算。 x <- 2 y <- 10 # 求模 y %% x # 整除 y %/% x # 取绝对值 abs(-x) # 指数运算 y ^x y^1/x #对数运算 log(x) #log()函数默认情况下以 e 为底 双等号“”的作用等同于identical(…

【算法】离散化

离散化 1.离散化的原理和模版2.火烧赤壁3.贴海报 1.离散化的原理和模版 当题目中数据的范围很大&#xff0c;但是数据的总量不是很大。此时如果需要用数据的值来映射数组的下标时&#xff0c;就可以用离散化的思想先预处理一下所有的数据&#xff0c;使得每一个数据都映射成一…

【Nacos】负载均衡

目录 前言 一、服务下线二、权重配置三、同一个集群优先访问四、环境隔离 前言 我们的生产环境相对是比较恶劣的&#xff0c;我们需要对服务的流量进行更加精细的控制.Nacos支持多种负载均衡策略&#xff0c;包括配置权重&#xff0c;同机房&#xff0c;同地域&#xff0c;同环…

【开源免费】基于SpringBoot+Vue.JS夕阳红公寓管理系统(JAVA毕业设计)

本文项目编号 T 146 &#xff0c;文末自助获取源码 \color{red}{T146&#xff0c;文末自助获取源码} T146&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…

视频修复最强算法 部署笔记2025

目录 模型下载: 模型: 原版保存的视频,vs code不播放: 模型下载: Release ProPainter V0.1.0 Release sczhou/ProPainter GitHub huggingface-cli download --resume-download lixiaowen/diffuEraser --local-dir /mnt/pfs/models/huggingface/models--lixiaowen--d…