AQS面试题

news2024/9/22 1:09:44

更多面试资料请添加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.coloradmin.cn/o/1075830.html

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

相关文章

国产化技术探究达梦8数据库搭建一主一从双机热备守护Data Watch集群搭建实战

国产化技术探究达梦8数据库搭建一主一从双机热备守护集群搭建实战 一、环境说明 服务器类型IP地址操作系统数据库实例名称主机172.18.21.144centos7DMSERVER备机172.18.21.147centos7DMSERVER2 参数主库备库实例名称DMSERVERDMSERVER 2IP172.18.21.144172.18.21.147OGUID453…

有趣的数学 积分符号∫ (integration)简述

1、简述 积分是微积分的一个主要部分。它是求和概念的延伸。事实上,积分符号源自一个拉长的字母S,最初由莱布尼茨使用(也有人说是牛顿),代表Summa,在拉丁语中意为“和”,对切片进行求和的想法。…

计算机的体系与结构

文章目录 前言一、冯诺依曼体系二、现代计算机的结构总结 前言 今天给大家介绍计算机的体系和结构,分为两个板块:冯诺依曼体系和现代计算机的结构。 一、冯诺依曼体系 冯诺依曼体系是将程序指令和数据一起存储的计算机设计概念结构。 冯诺依曼体系可以…

基于LSTM-Adaboost的电力负荷预测的MATLAB程序

微❤关注“电气仔推送”获得资料(专享优惠) 主要内容: LSTM-AdaBoost负荷预测模型先通过 AdaBoost集成算法串行训练多个基学习器并计算每个基学习 器的权重系数,接着将各个基学习器的预测结果进行线性组合,生成最终的预测结果。代码中的LST…

MySQL之MHA集群

MHA概述 什么是 MHA MHA(MasterHigh Availability)是一套优秀的MySQL高可用环境下故障切换和主从复制的软件。 MHA 的出现就是解决MySQL 单点故障的问题。 MySQL故障切换过程中,MHA能做到0-30秒内自动完成故障切换操作。 MHA能在故障切换…

hbba网站下载国家标准/行业标准的方法

hbba网站是不提供下载按钮并且不支持右键的,那么如何下载呢? 1、首先看一下pdf有多少页,一般标准介绍上有写。 2、使用edge或google浏览器打开pdf预览页面,打开开发者模式,用小箭头指向第一页,这样就获取到…

数据库引擎选择指南:MyISM和InnoDB哪个更适合你?

亲爱的小伙伴们,大家好!我是小米,今天我要和大家一起来聊一聊两个数据库引擎,分别是MyISM和InnoDB。这两个数据库引擎在MySQL中都扮演着非常重要的角色,了解它们的特点和区别对于我们理解数据库的工作原理和性能优化非…

短视频矩阵系统源码--saas开发

一、概述 抖音SEO矩阵系统源代码是一套针对抖音平台的搜索引擎优化工具,它可以帮助用户提高抖音视频在搜索结果中的排名,增加曝光率和流量。本开发文档旨在提供系统的功能框架、技术要求和开发示例,以便开发者进行二次开发和优化。 二、功能框…

ctfshow web入门 php特性 web136-web140

1.web136 还有一种写文件的命令时tee命令 payload&#xff1a; : ls /|tee 1 访问1下载查看文件1发现根目录下有flag cat /f149_15_h3r3|tee 2 访问下载查看文件22.web137 call_user_func <?php class myclass {static function say_hello(){echo "He…

【m98】视频帧的 jitterbuffer 1:

管理待解码的视频帧: VCMFrameBuffer VCMFrameBufferStateEnum 代表帧的状态信息:组帧失败的(kStateEmpty)?kStateIncomplete(存储了部分包)?kStateComplete(拥有了所有包?) enum VCMFrameBufferStateEnum {kStateEmpty, // frame popped by the RTP receiver…

phpstorm不提示$this->request,不提示Controller父类的方法

![在这里插入图片描述](https://img-blog.csdnimg.cn/d55799a22b724099930eb7fb67260a12.png 最后 保存就可以了

Vue-2.0组件化开发

组件化 一个页面可以拆分成一个个组件&#xff0c;每个组件有着自己独立的结构、样式、行为。 好处&#xff1a;便于维护&#xff0c;利于复用->提升开发效率 组件分类&#xff1a;普通组件、根组件 根组件 整个应用最上层的组件&#xff0c;包裹所有普通小组件。 Ctrl…

leetCode 53.最大子数组和 动态规划 + 优化空间复杂度

关于此题我的往期文章&#xff1a; leetCode 53.最大子数和 图解 贪心算法/动态规划优化_呵呵哒(&#xffe3;▽&#xffe3;)"的博客-CSDN博客https://heheda.blog.csdn.net/article/details/13349726853. 最大子数组和 - 力扣&#xff08;LeetCode&#xff09; >&…

WebKit Insie: Active 样式表

WebKit Inside: CSS 样式表的匹配时机介绍了当 HTML 页面有不同 CSS 样式表引入时&#xff0c;CSS 样式表开始匹配的时机。后续文章继续介绍 CSS 样式表的匹配过程&#xff0c;但是在匹配之前&#xff0c;首先需要收集页面里面的 Active 样式表。 1 Active 样式表 在一个 HTML …

Windows下Mosquitto服务配置监听任何IP,搭配使用MQTTX

Mosquitto 默认只监听本地地址&#xff0c;想让它监听其他的IP和端口需要以下操作在mosquitto.conf文件最后加如下内容 allow_anonymous true listener 1883 0.0.0.0 在启动的时候只需要 .\mosquitto.exe -c .\mosquitto.conf -v 就可以了

2023年中国临床信息系统市场规模及细分市场结构分析[图]

临床信息系统(ClinicalInformationSystem&#xff09;&#xff0c;其主要目标是支持医院医护人员的临床活动&#xff0c;收集和处理病人的临床医疗信息&#xff0c;丰富和积累临床医学知识&#xff0c;并提供临床咨询、辅助诊疗、辅助临床决策。传统上&#xff0c;一些人把直接…

自动化测试面试题

常规问题 1、如何快速深入的了解移动互联网领域的应用 &#xff08;答案&#xff1a;看http协议 restful api知识 json加1分&#xff09; 2、对xx应用自己会花多久可以在业务上从入门到精通&#xff0c;说说自己的方法 &#xff08;答案&#xff1a;看api和数据库的加1分&…

解决远程视频会议卡顿问题,优化企业网络办公体验

视频会议、在线语音这种交互类的应用都是对网络链路质量有高要求的场景&#xff0c; 而造成视频会议卡顿的原因也是有多方面因素的&#xff0c;比如视频应用服务器或者终端的原因造成&#xff0c;网络当然也是其中很重要的一个因素&#xff0c;比如网络线路质量不稳定&#xff…

c语言文件操作详解:fgetc,fputc,fgets,fputs,fscanf,,fprintf,fread,fwrite的使用和区别

前言&#xff1a;在对于c语言的学习中&#xff0c;我们为了持续使用一些数据&#xff0c;为了让我们的数据可以在程序退出后仍然保存并且可以使用&#xff0c;我们引入了文件的概念和操作&#xff0c;本文旨在为大家分享在文件操作中常用的输入输出函数的使用方式和技巧&#x…