当前位置: 首页 > article >正文

Lock和Synchronized的区别,源码分析

Lock和Synchronized的区别,源码分析

探究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.kler.cn/a/516726.html

相关文章:

  • 「 机器人 」扑翼飞行器的数据驱动建模核心方法
  • 软件测试 —— jmeter(2)
  • 自动化01
  • Effective Python系列(1.1):区别bytes和str
  • nginx分发请求超时切换服务
  • 【k8s】k8s部署Argo CD
  • 基于Springboot用axiospost请求接收字符串参数为null的解决方案
  • 【unity游戏开发之InputSystem——02】InputAction的使用介绍(基于unity6开发介绍)
  • 68,[8] BUUCTF WEB [RoarCTF 2019]Simple Upload(未写完)
  • JAVASE入门八脚-Spring ,时间Data,Dateformat,parse,Math,容器
  • Linux网络 | 网络计算器客户端实现与Json的安装以及使用
  • 深度剖析 PyTorch框架:从基础概念到高级应用的深度学习之旅!
  • OpenCV: 深入理解OpenCV中CV_WRAP_AS宏及其作用
  • 城市生命线安全保障:技术应用与策略创新
  • 使用 ECS服务器 和 vsCode 搭建远程开发站
  • Windows电脑不小心点击了关机,关机过程中如何阻止
  • 20250121面试鸭特训营第29天
  • Python的进程和线程
  • stm32f103 单片机(一)第一个工程
  • 2025.1.21——六、BUU XSS COURSE 1 XSS漏洞|XSS平台搭建
  • react引入DingTalk-JinBuTi字体
  • 考研机试题:打印数字菱形
  • 宝塔Linux面板教程
  • 【数据结构】深入解析:构建父子节点树形数据结构并返回前端
  • TCP 详解
  • 【uniapp】获取上传视频的md5,适用于APP和H5