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

【多线程】lock与synchronized的区别

相同点:

1、他们都是Java中用于解决线程安全的工具,两者的性能相差不大

不同点:

1、在实现上synchronized引入了偏向锁、轻量级锁、重量级锁、锁升级来优化加锁的性能,而lock则使用自旋锁来实现性能的优化

2、synchronized是Java中的关键字,而lock是JUC包底下的一个接口,该接口有许多实现类。

3、在锁粒度的控制上不同,synchronized通过两种方式来控制锁的粒度,一种是将synchronized修饰方法,另一种是放在代码块上,并且我们可以通过synchronized锁对象的生命周期来控制锁的作用范围;而lock锁的粒度是通过lock中的lock()方法与unlock()方法来控制

4、在灵活度方面,lock比synchronized更加灵活,而且相比于无法实现非阻塞竞争锁的synchronized,lock提供了非阻塞竞争锁的tryLock()方法,这个方法通过返回true/false来告知当前线程该锁是否被其他线程持有

5、Lock提供了公平锁与非公平锁的机制,而synchronized则仅提供了一种非公平锁机制。所谓的公平锁指的是线程在竞争锁时,如果已经有其他线程在排队等待锁,那么当前竞争锁的线程不可以进行插队。而非公平锁就是不管是否有其他线程排队等待锁,他都会尝试去竞争锁。

http://www.lryc.cn/news/150253.html

相关文章:

  • 什么是RTC
  • BW 源/目标模型主键不一样,增量的作用
  • HK1 RBOX X4,Vontar X4,S905 X4 刷 ATV
  • Rust 学习笔记(持续更新中…)
  • 递归算法学习——电话号码的字母组成,括号生成,组合
  • 记录 JSONObject.parseObject json对象转换 对象字段为null
  • Android Native Code开发学习(二)JNI互相传参返回调用
  • Ubuntu 下安装Qt5.12.12无法输入中文解决方法
  • 微信小程序左上角home图标的解决方法之一 层级混乱导致的home图标显示的问题 自定义左上角左侧图标的返回路径
  • Kubernetes(K8s 1.28.x)部署---超详细
  • spring高级源码50讲-20-36(springMVC)
  • Leetcode Top 100 Liked Questions(序号141~189)
  • 网络编程day3-FTP客户端项目
  • 音频母带制作::AAMS V4.0 Crack
  • 【SpringCloud】SpringCloud整合openFeign
  • 成集云 | 飞书审批同步金蝶云星空 | 解决方案
  • 【计算机组成 课程笔记】3.2 算数运算和逻辑运算的硬件实现
  • python元组的不可变性和应用场景
  • 配置化开发的核心设计 - Schema
  • HTTP协议概述
  • fastjson2 打开 AutoType
  • 封装(个人学习笔记黑马学习)
  • PyTorch 模型性能分析和优化 - 第 3 部分
  • 【力扣每日一题】2023.9.1 买钢笔和铅笔的方案数
  • 实现不同局域网间的文件共享和端口映射,使用Python自带的HTTP服务
  • Kubernetes技术--k8s核心技术Pod
  • 基于Springboot实现的Echarts图表
  • adb server version (41) doesn‘t match this client (39)
  • B080-RabbitMQ
  • 关于岛屿的三道leetcode原题:岛屿周长、岛屿数量、统计子岛屿