AQS面试题

更多面试资料请添加wx:suns45

———Java的AQS———

1、AQS的理解

  1. AQS是一个锁框架,提供了扩展地方

  2. 当多个线程抢锁时,获取不到锁的线程,AQS会自动管理

  3. AQS是同步队列+条件队列

  4. AQS分为4个时机,获取锁,释放锁,条件队列的阻塞、条件队列的唤醒。

2、 多个线程通过锁请求共享资源,获取不到锁的线程怎么办?

  1. 尝试获得锁,获得锁了直接返回,获取不到锁的走到 2;

  2. 用 Node 封装当前线程,追加到同步队列的队尾,追加到队尾时,又有两步,如 3 和 4;

  3. 自旋 + CAS 保证前一个节点的状态置为 signal;

  4. 阻塞自己,使当前线程进入等待状态。

3、排它锁和共享锁

  1. 排它锁只会唤醒头节点,

  2. 共享锁还会唤醒头节点和后续节点。

4、排它锁和共享锁的区别

  1. 排它锁的意思是同一时刻,只能有一个线程可以获得锁

  2. 共享锁可以允许多个线程获得同一个锁

5、同步队列

结构

  1. 双向链表,头是head,尾是tail

  2. 节点是Node,Node里面是prev和next属性

作用

阻塞获取不到锁的线程

大致过程

1.多个线程获取锁时,只有一个线程能获取锁,封装成node加入到同步队列当中

2.当有锁释放时,同步队列释放头节点。

6、进出同步队列的时机

  1. 进队列

1.多个线程获取锁时,获取不到锁的线程进入队列

2.唤醒条件队列,从条件队列移入同步队列

  1. 出队列

1.锁释放。

2.线程进入条件队列。

7、条件队列的作用

  1. 对同步队列的场景功能补充,比如队列满时,put线程,队列空时,take线程。

8、条件队列元素入队和出队的时机和过程

  1. 入队:执行await方法时,线程会释放锁,进入条件队列

  2. 出队:有线程signal/signalAll时。

9、描述一下条件队列中的节点转移到同步队列中去的时机和过程?

时机

  1. 当有线程执行 signal、signalAll 方法时,从条件队列的头节点开始,转移到同步队列中去

过程

  1. 找到条件队列的头节点将next设置为null,移除条件队列

  2. 将该节点追加到同步队列队尾

  3. 状态从Condition设置为0

  4. 节点的前一个节点设置为SIGNAL阻塞自己。

10、线程入条件队列时,为什么需要释放持有的锁?

  1. 原因很简单,如果当前线程不释放锁,一旦跑去条件队里中阻塞了,后续所有的线程都无法获得锁,正确的场景应该是:当前线程释放锁,到条件队列中去阻塞后,其他线程仍然可以获得当前锁。

11、我要自定义锁,大概的实现思路是什么样子的?

  1. A类,在A类里面写一个内部B类继承AQS,实现tryAcquire和tryRelease两个方法,通过state是0判断可以获取锁,通过state递减为0可以判断释放锁

  2. 在A类中对外提供,lock和unlock方法

12、描述ReentrantLock两大特性:可重入性和公平性?底层分别如何实现的?

  1. 可重入性:对同一个资源重复加锁state会加1

  2. 公平性:按照线程入队列的顺序释放锁

  3. 底层:通过hasQueuedPredecessors,会判断当前线程节点是否是头结点的下一个节点。

13、如果一个线程需要等待一组线程全部执行完之后再继续执行,有什么好的办法么?是如何实现的?

  1. CountDownLatch 就提供了这样的机制,比如一组线程有 5 个,只需要在初始化

  2. CountDownLatch 时,给同步器的 state 赋值为 5,主线程执行 CountDownLatch.await ,子线程都执行 CountDownLatch.countDown 即可。

14、Atomic 原子操作类可以保证线程安全,如果操作的对象是自定义的类的话,要如何做呢?

Java 为这种情况提供了一个 API:AtomicReference,AtomicReference 类可操作的对象是个泛型,所以支持自定义类。

15、CountDownLatch和CyclicBarrier区别

CountDownLatch
  • CountDownLatch:有两个api,在创建的时候指定 数量,await,countDown

  • 适用场景

    1. 当商品进行退货的时候,不使用Countdownlatch,需要遍历退货,返回给前端结果
    1. 使用Countdownlatch,可以并发执行退货,返回给前端结果
  • CountDownLatch是什么?

    • 一个线程(或者多个), 等待另外N个线程完成某个事情之后才能执行
CyclicBarrier

https://makedown-psl.oss-cn-beijing.aliyuncs.com/psl/1685631048479-c3a00e5e-02ab-41c2-a170-66ba228347cf.png

  • CyclicBarrier:

    • 只有1个await的api 在创建的时候指定 数量,等待指定数量的线程执行完成之后才可以去执行后面的逻辑。
  • 是什么?

    • N个线程,他们之间任何一个没有完成,所有的线程都必须等待

    • 每个线程代表一个跑步运动员,当运动员都准备好后,才一起出发,只要有一个人没有准备好,大家都等待.

CountDownLatch和CyclicBarrier区别
  • 重用区别

    • CyclicBarrier 可重用

    • CountDownLatch 不可重用,计数值为 0 该 CountDownLatch 就不可再用了

  • 概念区别

    • CountDownLatch 是计数器, 线程完成一个就记一个, 就像 报数一样, 只不过是递减的.

    • CyclicBarrier更像一个水闸, 线程执行就想水流, 在水闸处都会堵住, 等到水满(线程到齐)了, 才开始泄流.

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

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

相关文章

文心一言Plugin实战来了,测试开发旅游攻略助手

刚刚过去的8月,百度WAVE SUMMIT 深度学习开发者大会上,重磅发布文心一言的五个原生插件:百度搜索、览卷文档(基于文档的交互)、E 言易图(数据洞察图表生成)、说图解画(基于图片的交互…

启动Spring Boot项目

介绍启动运行Spring Boot项目打包的jar 1、使用java -jar命令启动项目 java -jar project.jar 执行效果: 使用java -jar 文件名.jar启动项目,项目在前台运行,项目运行的日志将打印在当前控制台上,若退出当前控制台&#xff0c…

函数调用:为什么会发生stack overflow?

在开发软件的过程中我们经常会遇到错误,如果你用 Google 搜过出错信息,那你多少应该都访问过Stack Overflow这个网站。作为全球最大的程序员问答网站,Stack Overflow 的名字来自于一个常见的报错,就是栈溢出(stack ove…

微信小程序生成海报

效果: js1: const cloudHelper = require(../../../helper/cloud_helper.js);async function config1({cover,title,desc,qr,bg = }) {var qr1 ="images/qr.png"var qr2 ="https://636c-cloud1-0gu29f2j63906b7e-1319556650.tcb.qcloud.la/activitycomm/setu…

web入门---tomcat请求响应

Tomcat 介绍 Web 服务器是一个软件程序,对 HTTP协议的操作进行封装,使得不必直接对协议进行操作,让 web 开发更加便捷。主要功能是“提供网上信息浏览服务”。 下载 tomcat 演示说明 这里有一个示例直接双击打开 index.html但是这个“打开…

Cadence 设计实践笔记-小哥allegro 2层板笔记

本章节主要跟着B站PCB入门首选视频-小哥Cadence Allegro 2层板视频,结合自己的实践一步步完成一个完整的PCB板的设计。 视频链接地址: PCB入门首选视频-小哥Cadence Allegro 2层板视频_哔哩哔哩_bilibili 规范建立文件夹 建立八个文件夹 DATASHEET 主要存放设计项目…

第十二章 磁盘管理

1. 磁盘简介 1.1. 概念 硬盘是由一片或多篇带有磁性的铝合金制的盘片构成,是 一种大容量、永久性的外部存储设备 组成:盘片、马达驱动、缓存、控制电路、接口 图: 1.2. 逻辑结构 磁道:由内到外的同心圆 扇区:半径组成…

JVM基础:初识JVM

IDE:IntelliJ IDEA 2022.1.3 x64 操作系统:win10 x64 位 家庭版 文章目录 一、JVM是什么?二、JVM有哪些功能?2.1 解释和运行2.2 内存管理2.3 即时编译 三、有哪些常见的JVM?3.1 常见JVM3.2 Java虚拟机规范3.3 HotSpot的…

C++入门 第一篇(C++关键字, 命名空间,C++输入输出)

目录 1. C关键字 2. 命名空间 2.1 命名空间定义 2.2命名空间的使用 命名空间的使用有三种方式: 1.加命名空间名称及作用域限定符 2.使用using将命名空间中某个成员引入 3.使用using namespace 命名空间名称 引入 3. C输入&输出 4.缺省函数 4.1 缺省参…

记一次Hbase2.1.x历史数据数据迁移方案

查看待迁移的表 list_namespace_tables vaas_dwm2. 制作待迁移表“DWM_TRIP_PART”的快照 snapshot vaas_dwm:DWM_TRIP_PART,dwm_trip_part_snapshot3. 统计待迁移表数据总数 hbase org.apache.hadoop.hbase.mapreduce.RowCounter vaas_dwm:DWM_TRIP_PART

使用postMan调试接口出现 Content type ‘multipart/form-data;charset=UTF-8‘ not supported“

使用postMan调试接口出现 Content type multipart/form-data;charsetUTF-8 not supported" 问题原因解决方案 最近好久没写springboot项目了,然后写了一个添加用户的接口,使用postman测试时出现了问题。如下图: org.springfr…

HttpServletRequest对象与RequestDispatcher对象

一、HttpServletRequest对象 1.介绍 在Servlet API中,定义了一个HttpServletRequest接口,它继承自ServletRequest接口,专门用来封装HTTP请求消息。由于HTTP请求消息分为请求行、请求消息头和请求消息体三部分,因此,在…

【LVGL】SquareLine Studio入门基础操作

1.SquareLine Studio基础 在这篇文章中将介绍SquareLine Studio的基础操作、解释如何加载一个项目、布局结构。    启动软件后,可以加载之前的项目、创建项目、加载一个示例。    这里以打开示例audio_mixer为例,可以双击该项目打开或者选中该项目点击右下角的【创建】按…

Hadoop3教程(一):Hadoop的定义、组成及全生态概览

文章目录 (1)定义1.1 发展历史1.2 三大发行版本1.3 Hadoop的优势1.4 Hadoop的组成 (13)HDFS概述(14)Yarn架构(15)MapReduce概述(16) HDFS、YARN、MapReduce三…

【排序算法】详解冒泡排序及其多种优化稳定性分析

文章目录 算法原理细节分析优化1优化2算法复杂度分析稳定性分析总结 算法原理 冒泡排序(Bubble Sort) 就是从序列中的第一个元素开始,依次对相邻的两个元素进行比较,如果前一个元素大于后一个元素则交换它们的位置。如果前一个元素小于或等于后一个元素…

课题学习(七)----粘滑运动的动态算法

一、 粘滑运动的动态算法 在实际钻井过程中,钻柱会出现扭振和粘滑现象(粘滑运动–B站视频连接),但并不总是呈现均匀旋转。如下图所示,提取一段地下数据时,转盘转速保持在100 r/min,钻头转速在0-…

Java设计模式之六大设计原则

为什么要学习设计模式? 要知道设计模式就是软件工程的方法经验的总结,也是可以认为是过去一段时间软件工程的一个最佳实践,要理解,不要死记硬背。掌握这些方法后,可以让你的程序获得以下好处: 代码重用性…

膝关节检测之1设计目标手势与物体交互的动画

原来只用unity自带的IK,发现背部不能动,且手和手指的移动和旋转试了好像没法通过animation实现(加入关键帧并修改最终状态的数值后播放没有变化,确定最终关键帧的数值已经改了的)。看资料,发现final IK&…

thinkphp6入门(9)-- 获取url路径中的应用名、控制器名、操作名

如果使用了多应用模式,可以通过下面的方法来获取当前应用 app(http)->getName(); 获取当前控制器 Request::controller(); 获取当前操作 Request::action(); 在中间件middleware中是无法获取控制器和操作的 需要将middleware的引入修改为 config 目录下的 ro…

乐器经营商城小程序的作用是什么

乐器产品覆盖的人群非常广,小学生、老年人都有不小需求,也因此市场中的从业商家相对较多,产品丰富可供消费者选购,然而在实际经营中,线上线下面临痛点不少。 通过【雨科】平台搭建乐器小程序商城,将所有产品…