【JUC】显示锁

【JUC】显示锁

  • [1. 显式锁](#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 接口叫显式锁接口,其

对象实例叫做显式锁对象。

相关推荐
Seven971 分钟前
PriorityQueue的秘密:堆结构的高效应用与实现原理
java
Foreverthinker7 分钟前
平台唯一编号实现方案
java
我是一只小青蛙88813 分钟前
Java分层开发:PO、BO、DTO、VO全解析
java
步步为营DotNet14 分钟前
深度剖析.NET 中CancellationToken:精准控制异步操作的关键
java·前端·.net
a努力。18 分钟前
得物Java面试被问:B+树的分裂合并和范围查询优化
java·开发语言·后端·b树·算法·面试·职场和发展
a程序小傲20 分钟前
中国电网Java面试被问:Kafka Consumer的Rebalance机制和分区分配策略
java·服务器·开发语言·面试·职场和发展·kafka·github
lbb 小魔仙20 分钟前
从零搭建 Spring Cloud 微服务项目:注册中心 + 网关 + 配置中心全流程
java·python·spring cloud·微服务
BHXDML21 分钟前
Java 常用中间件体系化解析——从单体到分布式,从“能跑”到“可控、可扩展、可演进”
java·分布式·中间件
weixin1997010801624 分钟前
安家 GO item_area - 获取地区类列表数据接口对接全攻略:从入门到精通
java·数据库·golang
码出财富29 分钟前
60万QPS下如何设计未读数系统
java·spring boot·spring cloud·java-ee