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

【JUC】显示锁

【JUC】显示锁

  • 1. 显式锁

1. 显式锁

与 Java 内置锁(synchronized)不同,JUC 显式锁提供了一种非常灵活的、Java 语言基本的
锁,这种锁的使用非常灵活,可以进行无条件的、可轮询的、定时的、可中断的锁获取和释放操
作。由于 JUC 锁的加锁和解锁的方法都是通过 Java API 显示进行的,所以也叫显式锁。

使用 Java 内置锁时,不需要通过 Java 代码显式地对同步对象的监视器(Monitor)进行抢占
和释放,这些工作由 JVM 底层完成。而且任何一个 Java 对象都能作为一个内置锁使用,所以,
Java 的对象锁使用起来非常方便。但是,Java 内置锁的功能相对单一,不具备一些比较高级的锁
功能,比如:

(1)限时抢锁:在抢锁时设置超时时长,如果超时还未获得锁就放弃,不至于无限等下去。
(2)可中断抢锁:在抢锁时,外部线程给抢锁线程发一个中断信号,就能唤起等待锁的线
程,并终止抢占过程。
(3)多个等待队列:为锁维持多个等待队列,以便提高锁的效率。比如在生产者消费者模式
实现中,生产者和消费者共用一把锁,该锁上维持两个等待队列,一个生产者队列,一个消费者
队列。

除了以上功能问题之外,Java 对象锁还存在性能问题。在竞争稍微激烈的情况下,Java 对象
锁会膨胀为重量级锁(基于操作系统的 Mutex Lock 实现),而重量级锁的线程阻塞和唤醒操作,
需要进程在内核态和用户态之间来回切换,导致其性能非常低。所以,迫切需要提供一种新的锁,
来提升争用激烈场景下锁的性能。

Java 显式锁就是为了解决这些 Java 对象锁的功能问题、性能问题而生。JDK5 版本引入了
Lock 接口,Lock 是 Java 代码级别的锁。为了与 Java 对象锁相区分,Lock 接口叫显式锁接口,其
对象实例叫做显式锁对象。

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

相关文章:

  • 循环神经网络(RNN):序列数据处理的强大工具
  • 【面试题001】生产环境中如何排查MySQL CPU占用率高达100%?
  • NAT 与代理服务器 -- NAT,NAPT,正向代理,反向代理
  • 前端面试专栏-主流框架:10. React状态管理方案(Redux、Mobx、Zustand)
  • 【C语言极简自学笔记】重讲运算符
  • LVS+Keepliaved高可用群集
  • 【MySQL数据库 | 第五篇】DDL操作2
  • RabbitMQ概念
  • 深入解析线程池与队列系统设计原理
  • 【网工】华为配置专题进阶篇②
  • Oracle 创建定时任务
  • Web服务器/tmp隔离的安全性与绕过分析
  • VSCode 插件 Remote - SSH:开启高效远程开发之旅
  • SpringBoot电脑商城项目--新增收获地址
  • 系统的性能优化
  • kettle好用吗?相较于国产ETL工具有哪些优劣之处?
  • git的使用——初步认识git和基础操作
  • 【Datawhale组队学习202506】零基础学爬虫 01 初始爬虫
  • Goursat问题解的公式推导
  • TikTok 矩阵如何快速涨粉
  • html中的table标签以及相关标签
  • 微信二次开发,对接智能客服逻辑
  • 百度下拉框出词技术解密:72小时出下拉词软件原理分享
  • 5G光网络新突破:<Light: Science Applications>报道可适应环境扰动的DRC实时校准技术
  • OpenStack 入门与实践
  • 激光雷达与视频融合(DeepFusion)的多模态高精度目标定位
  • PostgreSQL的扩展bloom
  • 数学建模会议笔记
  • STM32 HAL 库串口收发完全指南:从基础配置到实战应用
  • 标杆确立!永洪科技位于IDC报告Data Analytics领域象限排头位!