Java面试篇基础部分- 锁详解

Java面试篇基础部分-ReentrantLock详解 ReentrantLock 是继承了Lock接口,并且实现了再接口中定义的方法,属于一个可重入的独占锁。ReentrantLock 通过自定义队列同步器(Abstract Queued Synchroinzed,AQS)来实现锁的获取与释放。那么什么是独占锁呢?独占锁就是指这个锁在同一时刻只能被一个线程所获取到,如果其他线程想要获取到这个锁,则只能在同步队列中等待;而锁的可重入是指同一个线程对同一个资源能够执行多次加锁操作。ReentrantLock 支持公平锁与非公平锁的实现。 阅读详情

在这里插入图片描述

可重入锁

  可重入锁也叫作递归锁,是指在同一个线程中,在外层函数获取到该锁之后,内存的递归函数还可以获取到该锁。在Java语言环境下,ReentrantLock和Synchroinzed都是可重入锁的代表。

公平锁与非公平锁

  • 公平锁(Fair Lock)是指在分配锁之前检查是否有线程在排队等待获取到锁,优先将锁分配给排队时间最长的线程。
  • 非公平锁(Nonfair Lock)是指在分配锁的时候不考虑线程排队等待的情况,直接尝试获取锁的操作,在获取不到锁的情况下再排到队尾进行等待。如果获取到锁,则执行自己的业务逻辑。

  因为公平锁需要在多核的情况下维护一个锁线程的等待队列,基于该队列进行锁的分配,因此效率比非公平锁要低很多。Java中Synchroinzed就是非公平锁,ReentrantLock默认的lock方法采用的也是非公平锁。

读写锁:ReadWriteLock

  在Java中通过Lock接口以及其子类对象提供了方便对对象进行加锁和释放锁。但是这种锁是不能区分读写的。所以叫做普通锁。为了提高I/O性能,Java提供了读写锁机制。

  读写锁分为读锁和写锁两种,多个读锁之间是不互斥的,读锁与写锁互斥。在读的地方使用读锁,在写的地方使用写锁,在没有写锁的情况下,读锁是无阻塞的。

  如果系统的要求是共享数据可以同时支持多线程并发读的操作,但不能支持多线程并发写,那么使用读锁机制可以很大程度上增加读取效率;如果系统对于共享数据在同一时只能由一个线程进行写操作,并且在写的过程中不能进行读取,那么这个时候就需要使用写锁。因为读写锁之间是互斥的,所以说如果有写锁的话,读锁是没有办法进入的。

  一般的情况下,分别定义一个读锁,一个写锁,在读取共享数据的时候使用读锁,在使用完成之后释放读锁,在写共享数据的时候使用写锁,在使用完成后释放写锁,在Java中提供了
java.util.concurrent.locks.ReadWriteLock的实现类ReentrantReadWriteLock来完成对读写锁的定义和使用。

import java.util.HashMap;  
import java.util.Map;  
import java.util.concurrent.locks.ReadWriteLock;  
import 
Java面试篇基础部分-ReentrantLock详解(二) ReentrantLock 通过在构造函数public ReentrantLock(boolean fair) 中传递不同的参数来定义不同的锁,默认实现的是非公平锁。这是因为,非公平锁虽然放弃了锁的公平性,但是他的执行效率要比公平锁要高。如果没有特殊的要求建议使用非公平锁。ReentrantLock 支持公平锁与非公平锁的两种方式;公平锁是指锁的分配和竞争机制是公平的,也就是说先到先得。非公平锁是指JVM遵循随机、就近原则来进行锁的分配。 阅读详情

相关推荐

Java面试篇基础部分-Java中的集合类

Java集合是面试中经常被问到的一块内容,很多人在这个地方被面试官吊打。Java集合类被定义在java.util包中,主要有四种集合,分别是List、Queue、Set和Map,每种集合分类如下图所示。

初学者 2229

Java中有关锁的面试题(部分)

死锁发生时,多个线程相互等待,导致程序无法继续执行。,并附带详细解答,希望能帮助你准备面试!这些是 Java 并发锁的常见面试题,涉及。是指线程在获取锁时不会立即阻塞,而是。Java 中关于锁的面试题经常涉及。JVM 默认自旋 10 次(可通过。:若竞争激烈,会浪费 CPU 资源。,熟练掌握后能应对大多数面试!:减少线程切换,提高性能。

weixin_43290370的博客 1961

Java面试知识点总结:从基础到高级的全面指南

在准备Java面试时,系统地覆盖从基础到高级的知识点是至关重要的。以下是一个详细的Java面试知识点总结,帮助你有针对性地准备面试。也算是我自己总结的知识点,先记录下来,说不定下次准备面试的时候,能再用上。

weixin_43837507的博客 2664

Java面试篇基础部分-Synchronized关键字详解

Synchronized关键字用于对Java对象、方法、代码块等提供线程安全操作。Synchronized属于独占式的悲观锁机制,同时也是可重入锁。我们在使用Synchronized关键字的时候,可以保证同一时刻只有一个线程对该对象进行访问;也就是说它在同一个JVM中是线程安全的。Java中的每个对象都有一个monitor对象,加锁就是再竞争monitor对象。代码块加锁是通过在代码块前后分别加上monitorenter和monitorexit指令实现。方法加锁则是通过一个标记位来进行判断。

初学者 1837

JAVA基础篇面试

fail-fast 机制是 Java 集合(Collection)中的一种错误机制。当多个线程对同一个集合的内容进行 操作时,就可能会产生 fail-fast 事件。例如:当某一个线程 A 通过 iterator 去遍历某集合的过程中,若该集合的内容被其他线程所改变 了,那么线程 A 访问集合时,就会抛出 ConcurrentModificationException 异常,产生 fail-fast 事 件。这里的操作主要是指 add、remove 和 clear,对集合元素个数进行修改。解决办法。

RE_Z002的博客 1081

Android面试指南(三)————Java基础篇

因为如果不是2的幂,可能会造成更多的hash碰撞(index 下标碰撞)假设n为17,n-1的二进制为10000,01001和01101算出的index值均为0假设n为16,n-1的二进制为01111,01001和01101算出的index值不同资源竞争互相等待假设线程A,线程B,资源A,资源B线程A访问资源A,持有资源A锁,线程B访问资源B,持有资源B锁,而后线程A要访问资源B,但是线程B持有资源B锁,线程A等待,线程B要访问资源A,但是线程A持有资源A锁。所以B等待。

2401_84123113的博客 948

java基础面试题汇总A篇

java基础面试题汇总 先写出基本常见的大厂面试题,后面会持续更新面试的题 1.求6&3,-6&-3的值 解析: Java使用 补 码 来 表 示 二 进 制 数 ,在补 码 表 示 中 ,最高 位 为 符号 位 ,正数 的 符 号 位 为 0,负数 为 1。补 码 的 规 定 如 下 : 对 正 数 来 说 ,最高位为 0,其余 各 位 代 表 数 值 本 身 (以二 进制 表 示 ),如 +42的补码 为 00101010。 对 负 数 而 言 ,把该 数 绝 对 值 的 补 码 按

weixin_39160689的博客 2020

面试题汇总一 Java 语言基础篇

前言 题目汇总来源史上最全各类面试题汇总,没有之一,不接受反驳 春招的进度有些太快了,不知道现在开始学还来不来得及。跟着上面那篇公众号文章里的问题学的,顺便做个记录。 面试题汇总一 Java 语言基础篇 面试题汇总二 Java 多线程篇 面试题汇总三 Java 集合篇 面试题汇总四 JVM 篇 面试题汇总五 Spring 篇 面试题汇总六 数据库篇 面试题汇总七 计算机网...

u013575592的博客 3227

java面试之人事部分

根据博主面试经历总结,希望对你有帮助~ 人事部分: 第一:你好,我是今天来参加面试的xxx,这是我的简历! 第二:人事:请你做一下自我介绍?            我:你好,我叫xxx,来自xx,今年xx岁,毕业于xx,学的是xx专业, 从事软件行业工作,到现在有三年的工作经验了,在这期间...

Smile_Sunny521的博客 3032

超详细的Java面试题汇总(基础篇+框架篇)

Java面试题汇总-基础篇 1.面向对象是什么? 答:面向对象是一种思想,世间万物都可以看做一个对象,这里只讨论面向对象编程(OOP),Java是一个支持并发、基于类和面向对象的计算机编程语言,面向对象软件开发的优点:代码开发模块化,更易维护和修改;代码复用性强;增强代码的可靠性和灵活性;增加代码的可读性。 2、String 是最基本的数据类型吗? 答:不是。Java中的基本数据类型只有8个:by...

Jex的博客 1274

Android面试指南(三)————Java基础篇,Android面试2024

因为如果不是2的幂,可能会造成更多的hash碰撞(index 下标碰撞)假设n为17,n-1的二进制为10000,01001和01101算出的index值均为0假设n为16,n-1的二进制为01111,01001和01101算出的index值不同资源竞争互相等待假设线程A,线程B,资源A,资源B线程A访问资源A,持有资源A锁,线程B访问资源B,持有资源B锁,而后线程A要访问资源B,但是线程B持有资源B锁,线程A等待,线程B要访问资源A,但是线程A持有资源A锁。所以B等待。

2401_84149694的博客 1156

大厂面试突击——java基础篇

全文共11620字,我不相信你能一次看完

公号:一条coding 3万+

DexProtector内存态匿名段检测绕过与dex重组技术

Dex文件是Android应用的核心执行单元,其结构规范(如header_item、class_def_item、code_item)决定了运行时加载与解析的底层逻辑。DexProtector通过将dex数据拆解为多个无文件名、受保护的内存匿名段(如[anon:dp_header]、[anon:dp_code]),规避传统基于文件特征或标准加载路径的检测机制。该策略依赖Android mmap内存管理与ART虚拟机对dex结构的刚性要求,形成可被观测的布局规律。理解其内存态组织原理,结合权限/大小/命名/内

weixin_30855761的博客 687

Fluent DPM模型保姆级教程:三通管颗粒流动模拟,从网格导入到轨迹图生成

本文提供Fluent DPM模型在三通管颗粒流动模拟中的保姆级教程,涵盖从网格导入到轨迹图生成的全流程。通过详细步骤和参数设置,帮助用户掌握DPM模型在颗粒流动模拟中的关键技巧,适用于化工、能源等领域的工程应用。

weixin_30615767的博客 578

TOPSIS+熵权法组合拳:5分钟学会供应商选择决策模型

本文详细介绍了如何运用TOPSIS和熵权法这对黄金组合,快速构建科学、客观的供应商评估决策模型。通过数据标准化、权重计算和综合排序,帮助企业在半小时内完成高效、准确的供应商选择,解决传统主观打分法的弊端,提升供应链管理效率。

weixin_29051149的博客 275

【ESP32】SPI SRAM memory test fail。External RAM failed memory test!

log日志报错如下:这两条报错信息表明外部 SPI SRAM(静态随机存取存储器)的内存测试失败。

weixin_56217406的博客 1024

OCC WebGL案例编译实战:从FreeType配置到静态库生成

本文详细记录了将OCC(Open CASCADE Technology)3D图形库编译为WebAssembly(Wasm)并在浏览器中通过WebGL渲染的实战过程。重点解决了FreeType库的交叉编译配置、OCC核心库的裁剪与静态库生成,以及WebGL样例项目的CMake改造等关键步骤,为开发者提供了从环境搭建到最终集成的完整指南。

weixin_28831461的博客 314

【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)

【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)【新手必看】挖漏洞流程指南,黑客手把手教你挖漏洞月入过万!收藏这篇就够了!(附学习笔记)

weixin_57514792的博客 1103

29、集成电路测试技术解析

本文深入解析了集成电路测试技术,涵盖定制电路测试资源与策略、混合模拟/数字电路测试方法、数字测试模式生成难点与解决方案,以及可控性和可观测性的核心概念。同时详细讨论了固定故障、桥接故障和开路故障等主要故障模型及其检测方法。在测试技术的综合应用与优化方面,提出了合理配置测试资源、优化测试模式和设计测试流程的策略。最后展望了测试技术的发展趋势,包括集成化测试、自动化测试和智能化测试。通过全面掌握这些测试技术,可以有效提高集成电路的质量和可靠性,推动集成电路产业的发展。

work3的博客 203

基于YOLOv8的建筑材料分类系统:从数据集构建到UI界面实现

建筑材料分类数据集需要包含各种常见建筑材料的图像,并对每种材料进行标注。砖块(Brick)混凝土(Concrete)钢筋(Rebar)木材(Wood)瓷砖(Tile)玻璃(Glass)钢材(Steel)塑料(Plastic)石膏板(Drywall)绝缘材料(Insulation)如果没有找到合适的公开数据集,可以构建自己的数据集。使用智能手机或专业相机拍摄各种建筑材料的照片确保在不同光照条件、角度和背景下拍摄每类材料至少收集300-500张图像。

YOLO 488

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: Java面试篇基础部分-Semaphore及其用法详解
下一篇: Java面试篇基础部分- Java中的阻塞队列
nihui123
博客等级 码龄11年 7587粉丝 437原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nihui123

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值