「Java面试」被这题怼到不行,什么是可重入锁能解决什么问题?

简介: 一位3年工作经验的小伙伴,去一家互联网公司面试,结果被面试官怼了。面试官说:”这么简单的问题你都不知道?没法聊了,回去等通知吧“。然后,回来跟我是一阵诉苦。

一位3年工作经验的小伙伴,去一家互联网公司面试,结果被面试官怼了。面试官说:”这么简单的问题你都不知道?没法聊了,回去等通知吧“。然后,回来跟我是一阵诉苦。

另外,我花了1个多星期,准备了一份500页的PDF面试题解析配套文档,想获取的小伙伴可以扫描文章底部二维码免费领取!

(附赠10万字大厂内部面试资料!)

1、可重入锁的官方定义

image.jpeg


可重入是多线程并发编程里面一个比较重要的概念。简单来说,就是在运行的某个方法或代码片段,因为抢占资源或者中断等原因导致方法或者代码片段的运行中断,等待中断程序执行结束后,重新进入到这个方法或者代码片段中运行,并且运行结果不会受到影响,那么这个方法或者代码片段就是可重入的。

而可重入锁,简单来说就是一个线程如果抢占到了互斥锁资源,在锁释放之前再去竞争同一把锁的时候,不需要等待,只需要记录重入次数。

image.jpeg


在多线程并发编程里面,绝大部分锁都是可重入的,比如 synchronized、ReentrantLock 等,但是也有不支持重入的锁,比如 JDK8 里面提供的读写锁StampedLock。

2、可重入锁的应用场景

来看这么一段代码:

public static synchronized void lock1(){
    //Thread X 获取到了lock1()中的synchronized锁
    //再次调用另外一个加同步锁的lock2()方法
    lock2();
}
public static synchronized void lock2(){
    //To do
}

image.jpeg


锁的可重入性,主要解决的问题是避免线程死锁的问题。因为一个已经获得同步锁 X 的线程,在释放锁 X 之前再去竞争锁 X 的时候,相当于会出现自己要等待自己释放锁,这很显然是无法成立的。

关于这个问题,其实是考察应聘者的基础知识。互联网大厂对基础的考察会特别深,各位想进互联网的小伙伴还是需要在工作之外去多花一点时间研究。对于 3 年工作经验的小伙伴,也应该要开始关注这一类问题了。

最后,我把之前分享的视频全部整理成了文字,想获取的小伙伴可以扫描文章底部二维码拿!希望能够以此来提高各位粉丝的通过率。

ee90d9963df444db88b33d6e798a5b94.gif

我是被编程耽误的文艺Tom,只弹干货不掺水!你们的支持就是我最大的动力!关注我,面试不再难!

相关文章
|
缓存 Java 关系型数据库
2025 年最新华为 Java 面试题及答案,全方位打造面试宝典
Java面试高频考点与实践指南(150字摘要) 本文系统梳理了Java面试核心考点,包括Java基础(数据类型、面向对象特性、常用类使用)、并发编程(线程机制、锁原理、并发容器)、JVM(内存模型、GC算法、类加载机制)、Spring框架(IoC/AOP、Bean生命周期、事务管理)、数据库(MySQL引擎、事务隔离、索引优化)及分布式(CAP理论、ID生成、Redis缓存)。同时提供华为级实战代码,涵盖Spring Cloud Alibaba微服务、Sentinel限流、Seata分布式事务,以及完整的D
795 1
|
缓存 Java API
Java 面试实操指南与最新技术结合的实战攻略
本指南涵盖Java 17+新特性、Spring Boot 3微服务、响应式编程、容器化部署与数据缓存实操,结合代码案例解析高频面试技术点,助你掌握最新Java技术栈,提升实战能力,轻松应对Java中高级岗位面试。
759 0
|
算法 Java
50道java集合面试题
50道 java 集合面试题
|
Java 数据库连接 数据库
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
本文全面总结了Java核心知识点,涵盖基础语法、面向对象、集合框架、并发编程、网络编程及主流框架如Spring生态、MyBatis等,结合JVM原理与性能优化技巧,并通过一个学生信息管理系统的实战案例,帮助你快速掌握Java开发技能,适合Java学习与面试准备。
589 2
Java 相关知识点总结含基础语法进阶技巧及面试重点知识
|
算法 Java
50道java基础面试题
50道java基础面试题
|
算法 架构师 Java
Java 开发岗及 java 架构师百度校招历年经典面试题汇总
以下是百度校招Java岗位面试题精选摘要(150字): Java开发岗重点关注集合类、并发和系统设计。HashMap线程安全可通过Collections.synchronizedMap()或ConcurrentHashMap实现,后者采用分段锁提升并发性能。负载均衡算法包括轮询、加权轮询和最少连接数,一致性哈希可均匀分布请求。Redis持久化有RDB(快照恢复快)和AOF(日志更安全)两种方式。架构师岗涉及JMM内存模型、happens-before原则和无锁数据结构(基于CAS)。
444 5
|
安全 Java API
2025 年 Java 校招面试常见问题及详细答案汇总
本资料涵盖Java校招常见面试题,包括Java基础、并发编程、JVM、Spring框架、分布式与微服务等核心知识点,并提供详细解析与实操代码,助力2025校招备战。
644 1
|
缓存 Java 关系型数据库
Java 面试经验总结与最新 BAT 面试资料整理含核心考点的 Java 面试经验及最新 BAT 面试资料
本文汇总了Java面试经验与BAT等大厂常见面试考点,涵盖心态准备、简历优化、面试技巧及Java基础、多线程、JVM、数据库、框架等核心技术点,并附实际代码示例,助力高效备战Java面试。
598 0
|
缓存 Cloud Native Java
Java 面试微服务架构与云原生技术实操内容及核心考点梳理 Java 面试
本内容涵盖Java面试核心技术实操,包括微服务架构(Spring Cloud Alibaba)、响应式编程(WebFlux)、容器化(Docker+K8s)、函数式编程、多级缓存、分库分表、链路追踪(Skywalking)等大厂高频考点,助你系统提升面试能力。
1746 0