一文解读ReentrantLock

news2024/11/13 10:00:56

本期说一下ReentrantLock的相关面试题。

Lock接口

  • 是JDK层面锁
  • 悲观锁
  • 可重入锁。(可重入锁(Reentrant Lock)是一种支持线程重复获取锁的锁机制。当一个线程已经获得了可重入锁后,它可以再次请求该锁而不会被阻塞,这就是锁的可重入性。ReentrantLock和synchronized都是可重入锁)
  • Lock接口的实现类
    • ReentrantLock 是一个可重入锁的实现,支持公平和非公平的锁获取。它提供了与 synchronized 关键字相似的功能,但更加灵活,可以支持更复杂的同步需求。
    • 示例代码
private final Lock lock = new ReentrantLock();
void example(){
  lock.lock(); // 获取锁
  try {
      // 执行被保护的代码块
  } finally {
      lock.unlock(); // 释放锁
  }
}
  • ReentrantReadWriteLock 是可重入的读写锁,它允许多个线程同时读取共享资源,但只允许一个线程写入。它由读锁(ReadLock)和写锁(WriteLock)组成。
  • StampedLock 是 JDK 8 引入的锁机制,它包含了乐观读锁、悲观读锁和写锁。它提供了更细粒度的控制,特别适用于读多写少的场景。

ReentrantLock锁过程是否可中断,与之对应的synchronized可中断吗?

答:

  • ReentrantLock提供了可中断的锁获取过程。当线程调用lockInterruptibly时,如果当前线程被中断(interrupt),它将尽快响应中断请求,并且在锁定期间发生中断时抛出InterruptedException。

  • 在 Java 中,使用synchronized关键字进行同步的锁是不可中断的。当线程试图获取一个对象的锁时,如果锁已经被其他线程占用,那么当前线程将进入阻塞状态,等待锁的释放。在这个等待的过程中,如果其他线程中断了当前线程,那么当前线程不会响应中断,而是会继续等待获取锁。

ReentranLock的可重入实现原理?

答:

  • ReentrantLock的可重入功能基于AQS的同步状态:state。
  • 其原理大致为:当某一线程获取锁后,将state值+1,并记录下当前持有锁的线程,再有线程来获取锁时,判断这个线程与持有锁的线程是否是同一个线程,如果是,将state值再+1,如果不是,阻塞线程。 当线程释放锁时,将state值-1,当state值减为0时,表示当前线程彻底释放了锁,然后将记录当前持有锁的线程的那个字段设置为null,并唤醒其他线程,使其重新竞争锁。

ReetrantLock非公平锁实现过程?

答:

alt 一个线程1获取到了锁,其他很多没获取到锁的线程(others_t)加入到了AQS的同步队列中等待,当这个线程执行完后,会去唤醒AQS同步队列中的下一个线程,被唤醒的线程和新来的线程重新竞争锁(不包含同步队列后面的那些线程),这些新来的线程相当于没有去排队而是直接插队和队首的被唤醒的线程一起竞争锁。

以上内容出自本人整理的面试秘籍。 链接: https://pan.baidu.com/s/1o014Ems8diV0D3h8K15olA?pwd=fi3x 提取码: fi3x 复制这段内容后打开百度网盘手机App,操作更方便哦

工作日每天更新,周末随缘更新。

请关注我,以便及时获取最新内容哦!

本文由 mdnice 多平台发布

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1969991.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

第G6周:CycleGAN实战

本文为365天深度学习训练营 中的学习记录博客 原作者:K同学啊 可参考论文:《Unpaired Image-to-Image Translation》 1、CycleGAN 能做什么? CycleGAN的一个重要应用领域是Domain Adaptation(域迁移:可以通俗的理解为…

Stable Diffusion 使用详解(5)---- 光影效果与场景融入

目录 背景 底模选取 提示词 ControlNet openpose illumination 效果 背景 有一家服装品牌店,需要绘制一款模特穿着某个英文LOG的漂亮服装,这是一种很常见UI作画需求,这类需求实际上可以透过选取正确的底模 controlNet 进行完美的实现…

vite vue3 Webstorm multiple export width the same name “default“

系统格式不一样,导致代码文件格式冲突导致的,解决方法找到对应的文件,将文件类型切换成LF。

软件测试--兼容性测试

兼容性测试综述 软件兼容性测试是指检查软件之间是否能够正确的交互和共享信息 交互可以同时运行于同一台计算机上的两个程序之间,甚至在相隔几千公里通过因特网连接的不同计算机上的两个程序之间进行。还可以离线介质如导出到介质然后导入到其他计算机的其他软件…

2024年最新护眼台灯攻略:孩视宝、飞利浦和书客护眼台灯哪个好

在当今数字时代,无论是工作还是学习,长时间面对电子屏幕已成为日常。这对眼睛健康提出了挑战,尤其是对于成长中的孩子,正确的照明环境对保护视力至关重要。因此,选择一款高质量的护眼台灯成为了许多家庭的刚需。 如今…

OPenCV高级编程——OPenCV形态学之腐蚀、膨胀、开运算、闭运算、形态学梯度等详解

目录 引言 形态学基础 结构元素(Structuring Element) 基本形态学操作 腐蚀(Erosion) 膨胀(Dilation) 开运算(Opening) 闭运算(Closing) 高级形态学…

读零信任网络:在不可信网络中构建安全系统06授权

1. 授权 1.1. 授权决策不容忽视,所有访问请求都必须被授权 1.2. 数据存储系统和其他各支撑子系统是授权的基石 1.2.1. 子系统提供访问控制的权威数据源和评估依据,直接影响授权决策 1.2.2. 谨慎区分各子系统的职责和能力,需要将其严格隔离…

高数经典反例记录(持续更新)

这篇博客总结了一些易混淆的概念以及经典反例,全部看完会有收获的,后期可能会继续补充! 1.概念模糊 2.极限存在/不存在问题

豹5全新价格引爆市场,技术平权开启SUV新篇章

关注汽车市场的小伙伴,想必都知道最近方程豹品牌的豹5车型,打出了23.98万元至30.28万元的全新价格区间,重新定义了SUV市场的竞争格局。 方程豹的这一举动,立刻引发了市场的热烈讨论:“豹5现在值得入手吗?”…

科普文: jdk 1.7和 jdk 1.8 中ConcurrentHashMap 原理浅析

1. 前言 为什么要使用 ConcurrentHashMap 主要基于两个原因: 在并发编程中使用 HashMap 可能造成死循环(jdk1.7,jdk1.8 中会造成数据丢失)HashTable 效率非常低下 2. ConcurrentHashMap 结构 jdk 1.7 和 jdk 1.8 中,ConcurrentHashMap 的结构有着很…

软件产品测试报告包括哪些内容?专业软件测试服务供应商推荐

在当今快速发展的软件行业中,软件产品测试报告的重要性愈加凸显。卓码软件测评作为专业的软件测试服务供应商,深知一份高质量的测试报告对于开发团队、管理层以及客户的重要性。 软件产品测试报告是对软件产品在测试过程中所表现出来的各项指标和特性的…

【架构师进阶必备】Spring - 运行时以四种方式动态注册 bean

Spring — 运行时以四种方式动态注册 bean 1. 概述 在本教程中,我们将学习“使用 spring 动态注册 bean”或“在运行时动态将 bean 添加到 spring-context”。在Spring 应用程序中加载和删除 bean 时,无需在运行时重新启动应用程序即可完成此操作。 如…

先用先发!小样本故障诊断新思路!Transformer-SVM组合模型多特征分类预测/故障诊断(Matlab)

先用先发!小样本故障诊断新思路!Transformer-SVM组合模型多特征分类预测/故障诊断(Matlab) 目录 先用先发!小样本故障诊断新思路!Transformer-SVM组合模型多特征分类预测/故障诊断(Matlab&#…

【RabbitMQ】路由模式(Routing)

一、基本概念 生产者(Producer):发送消息到交换机的程序。在发送消息时,需要指定一个路由键。交换机(Exchange):接收生产者发送的消息,并根据路由键将消息路由到与之匹配的队列。在…

【C++BFS】1466. 重新规划路线

本文涉及知识点 CBFS算法 LeetCode1466. 重新规划路线 n 座城市,从 0 到 n-1 编号,其间共有 n-1 条路线。因此,要想在两座不同城市之间旅行只有唯一一条路线可供选择(路线网形成一颗树)。去年,交通运输部…

软件测试--易用性测试

人体工程学这是一门将日常使用的东西设计为易于使用何实用性强的科学。因此人体工程学的主要目标是达到易用性。 用户界面测试 用于与软件程序交互的方式称为用户界面或UI。大家都熟悉的计算机UI随着时间推移发生了变化。早期的计算机有触发开关和发光管。纸带、穿孔卡和电传打…

AIGC技术的未来航向:深度解析与Java实践

摘要: 本文深入探讨了人工智能生成内容(AIGC)技术的未来发展方向,从技术创新、可持续可拓展性、用户体验、应用场景、政府赋能等多维度进行分析,并结合Java技术实践,提供具体的实现策略和代码示例。 引言…

PDF翻译神器:这四款可以实现一键搞定,留学党必备!

外文的阅读还是需要一定的语言功底,现在大家也对外文越来越重视起来了,但是借助一些翻译工具进行翻译可以很大程度地提升工作的效率,就算是遇到批量的文件处理也可以一键翻译出来,所以今天借此文章整理了四款好用的pdf翻译工具&am…

计算机基础(Windows 10+Office 2016)教程 —— 第3章 操作系统基础(下)

操作系统基础 Windows 10的系统管理3.5.1 设置日期和时间3.5.2 Windows 10 个性化设置3.5.3 安装和卸载应用程序3.5.4 分区管理3.5.5 格式化磁盘3.5.6 清理磁盘 3.6 Windows 10的网络功能3.6.1 网络软硬件的安装3.6.2 查看网络中其他计算机3.6.3 资源共享 3.7 Windows 10系统的…

数据灾备及时恢复应急预案

第一节总则 1,灾难备份的目的 为了规范本所重要数据备份清单的建立,备份的职责,备份的检查。以及系统受到破坏后的恢复工作,合理防范计算机及信息系统使用过程中的风险,特制定本预案。 2,灾难恢复的定义 灾…