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

news/2024/11/17 4:36:21/

在这里插入图片描述

可重入锁

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

公平锁与非公平锁

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

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

读写锁:ReadWriteLock

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

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

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

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

java">import java.util.HashMap;  
import java.util.Map;  
import java.util.concurrent.locks.ReadWriteLock

http://www.ppmy.cn/news/1531098.html

相关文章

Spring @Import

Import是Spring框架提供的注解org.springframework.context.annotation.Import,可以通过条件配置,选择性的注入哪些Bean到Spring IOC容器中; 一 Import注Bean到Spring容器 直接使用Import注解将Bean对象注入到容器 public class OrderChoi…

学习react小记

系列文章目录 目录 系列文章目录 前言 一、关于Hook 1、useEffect 1.1 如果在 useEffect 中没有声明第二个参数(依赖项数组),则会导致 useEffect 的行为有所不同。具体来说,以下是几种可能的情况: 1.1.1 没有依赖项数…

堆的数组实现

目录 一、堆 二叉树的顺序结构 堆的概念及结构 1.概念 2.堆的分类 (1)大堆 (2)小堆 二、利用数组(顺序结构)实现堆的过程 1.利用数组实现堆的思路 2.堆是用数组实现的,在数组中通过双亲找自己左右孩子、通过左右孩子找自己双亲的思路 2.1.思路 2.2.孩子与…

【Kubernetes】常见面试题汇总(二十九)

目录 81.简述你知道的几种 CNI 网络插件,并详述其工作原理。K8s 常用的CNI网络插件(calico && flannel),简述一下它们的工作原理和区别。 特别说明: 题目 1-68 属于【Kubernetes】的常规概念题&#xff…

uniapp webview清理缓存

uniapp webview清理缓存 后端服务器配置,JS/CSS文件的缓存时间为 :-1s location ~ .*.(js|css)?$ { expires -1s; error_log off; }前端打开webview页面处: //ios 禁用缓存,测试生效!! let cache1 plus.…

立体仓库WCS功能设计:物流自动化的智能核心

导语 大家好,我是社长,老K。专注分享智能制造和智能仓储物流等内容。 在现代物流的快速发展中,自动化立体仓库以其高效的空间利用率和节省人工的优势,成为了企业物流管理的关键。 而在这个自动化的生态系统中,Warehous…

【openwrt-21.02】openwrt PPTP Passthrough 不生效问题解决方案

Openwrt版本 NAME="OpenWrt" VERSION="21.02-SNAPSHOT" ID="openwrt" ID_LIKE="lede openwrt" PRETTY_NAME="OpenWrt 21.02-SNAPSHOT" VERSION_ID="21.02-snapshot" HOME_URL="https://openwrt.org/" …

2024最新国内镜像源设置(npm、yarn、pnpm)

淘宝镜像源https://registry.npmmirror.com/ 腾讯云镜像源https://mirrors.cloud.tencent.com/npm/ cnpm是一个基于npm的中国镜像源https://r.cnpmjs.org/ # 查询当前使用的镜像源 npm get registry# 设置为淘宝镜像源 npm config set registry https://registry.npmmirror.co…