面试 Java 并发编程八股文十问十答第十四期

面试 Java 并发编程八股文十问十答第十四期

作者:程序员小白条,个人博客

相信看了本文后,对你的面试是有一定帮助的!关注专栏后就能收到持续更新!

⭐点赞⭐收藏⭐不迷路!⭐

1)ForkJoinPool 有了解过吗?

是的,我了解 ForkJoinPool。它是 Java 并发包中提供的一个用于并行执行任务的框架,通常用于处理分而治之的任务。ForkJoinPool 使用工作窃取算法(work-stealing)来提高并行任务的执行效率,通过将大任务拆分成小任务,并行执行这些小任务,然后合并结果来完成整个任务的执行。在 Java 7 中引入,主要用于处理递归性的、数据量大的并行任务。

2)如果现在有多个线程并发执行,如何控制它们的执行顺序?

在 Java 中,可以使用各种同步机制来控制多个线程的执行顺序,比如使用 synchronized 关键字、ReentrantLock、CountDownLatch、CyclicBarrier 等。具体的控制方式取决于应用场景和需求,可以通过线程的等待、唤醒、阻塞、解锁等操作来实现线程的有序执行。

3)Java 中的阻塞队列用过哪些?

Java 中常用的阻塞队列包括:

  1. ArrayBlockingQueue: 基于数组的有界阻塞队列,固定大小,一旦队列满了,插入操作会阻塞,直到队列有空间;一旦队列为空,移除操作会阻塞,直到队列有元素。
  2. LinkedBlockingQueue: 基于链表的可选有界或无界阻塞队列,默认是无界的,可以通过构造函数指定容量。与 ArrayBlockingQueue 不同,LinkedBlockingQueue 在插入和移除时不会对整个队列进行锁定。
  3. PriorityBlockingQueue: 基于优先级堆的无界阻塞队列,元素按照优先级顺序被移除,插入时也可以指定优先级。
  4. DelayQueue: 基于优先级堆的延时阻塞队列,用于存放实现了 Delayed 接口的元素,只有在延时期满时才能从队列中取出元素。
  5. SynchronousQueue: 一个不存储元素的阻塞队列,每个插入操作必须等待一个对应的移除操作,反之亦然,主要用于线程间的数据交换。

这些阻塞队列都是线程安全的,可以在多线程环境下安全地使用。选择适当的队列取决于具体的需求和场景,比如是否需要有界队列、是否需要按照优先级顺序等。

4)用过Java 中哪些原子类?

Java 中的原子类主要用于在多线程环境下进行原子操作,保证操作的完整性和一致性,常用的原子类包括:

  1. AtomicInteger: 提供了原子更新整型的操作,比如自增、自减等。
  2. AtomicLong: 提供了原子更新长整型的操作。
  3. AtomicBoolean: 提供了原子更新布尔类型的操作。
  4. AtomicReference: 提供了原子更新引用类型的操作。
  5. AtomicReferenceFieldUpdater: 可以对指定类的指定字段进行原子更新。
  6. AtomicIntegerFieldUpdater: 对指定类的整型字段进行原子更新。
  7. AtomicLongFieldUpdater: 对指定类的长整型字段进行原子更新。
  8. AtomicStampedReference: 带有版本号的原子引用,可以解决 CAS 操作的 ABA 问题。

这些原子类都是线程安全的,可以在多线程环境下安全地进行操作,避免了使用 synchronized 或者 Lock 进行手动同步的开销和复杂性。

5)用过 Java 的累加器吗?

Java 中的累加器通常是指 LongAdder 和 DoubleAdder。它们是在 Java 8 中引入的原子累加器,用于在高并发情况下进行累加操作。与普通的原子类(如 AtomicInteger)不同,LongAdder 和 DoubleAdder 使用了一种分段的方式来减少竞争,从而提高了性能。

LongAdder 和 DoubleAdder 主要用于累加操作,比如统计数据量、计算总和等场景。它们提供了 add 方法用于增加值,sum 方法用于获取当前累加的总和,以及 reset 方法用于重置累加器的值。

6)Synchronized 和 ReentrantLock 有什么区别?

Synchronized 和 ReentrantLock 都是 Java 中用于实现线程同步的机制,但它们有一些区别:

  1. 实现方式: Synchronized 是 JVM 实现的,属于 Java 关键字;而 ReentrantLock 是基于 Java API 实现的类。
  2. 锁的获取方式: Synchronized 是隐式获取锁的,当线程进入 synchronized 代码块时,会自动获取锁,并在代码块执行完成后释放锁;而 ReentrantLock 需要显式地调用 lock 方法来获取锁,并且需要在 finally 块中调用 unlock 方法来释放锁。
  3. 可中断性: ReentrantLock 提供了可中断的获取锁方式,即可以在等待锁的过程中响应中断;而 Synchronized 不支持中断。
  4. 公平性: ReentrantLock 可以选择是否公平地获取锁,通过构造函数传入 true 来创建一个公平锁;而 Synchronized 是非公平的,无法控制。
  5. 条件变量: ReentrantLock 提供了 Condition 来实现线程等待/唤醒机制,可以精确控制线程的等待和唤醒;而 Synchronized 没有这样的功能,只能使用 wait 和 notify/notifyAll 方法来实现简单的等待/唤醒。

总的来说,ReentrantLock 提供了更灵活、更强大的线程同步机制,但使用起来也更加复杂,需要显式地管理锁的获取和释放;而 Synchronized 使用起来更简单,但功能相对较少,灵活性也较差。

7)Synchronized 原理知道不?

Synchronized 是 Java 中用于实现线程同步的关键字,它可以应用于方法或代码块,保证了多个线程对共享资源的安全访问。Synchronized 的原理主要基于对象头和监视器对象(Monitor)。

当一个线程进入 Synchronized 方法或代码块时,会尝试获取对象的监视器(Monitor)锁。如果这个锁已经被其他线程持有,那么当前线程会被阻塞,直到获取到锁为止。当线程执行完 Synchronized 方法或代码块后,会释放监视器锁,其他等待的线程就有机会获取锁进入临界区执行。

8)有深入分析过 Synchronized 底层原理吗?

Synchronized 的底层实现涉及到对象头的标记位和监视器锁的获取与释放机制。在 Java HotSpot 虚拟机中,Synchronized 的底层实现分为三种状态:无锁状态、偏向锁状态和轻量级锁状态。

  • 无锁状态: 当对象被创建时,对象头的 Mark Word 中的锁标志位为 00,表示无锁状态。这时候,任何线程都可以通过 CAS 操作尝试获取锁。
  • 偏向锁状态: 当对象被某个线程获取到锁后,对象头的 Mark Word 中的锁标志位变为 01,表示偏向锁状态。这时候,如果同一个线程再次进入临界区,就不需要再次进行加锁操作,可以直接进入,提高了效率。
  • 轻量级锁状态: 当有多个线程竞争同一个锁时,会进入轻量级锁状态。在这个状态下,线程会尝试使用 CAS 操作来获取锁,如果成功则将对象头中的锁标志位设置为指向线程栈中锁记录的指针,如果失败则会膨胀为重量级锁。

9)Synchronized轻量级锁升级会自旋?

是的,Synchronized 在轻量级锁状态下会进行自旋操作,尝试在用户态进行快速的锁竞争。当一个线程尝试获取轻量级锁失败时,会进入自旋状态,即在循环中不断尝试获取锁。自旋的目的是为了减少线程进入内核态的次数,提高锁的竞争效率。如果在一定次数的自旋之后还没有获取到锁,线程就会膨胀为重量级锁,进入阻塞状态。

10)Synchronized 升级到重量级锁会怎样?

当 Synchronized 升级到重量级锁时,会涉及到线程的阻塞和唤醒操作,这将引入更大的性能开销。在重量级锁状态下,如果一个线程持有锁,而另一个线程想要获取同一把锁,那么后者的线程将会进入阻塞状态,而不是像轻量级锁那样自旋。

重量级锁的实现通常会涉及到操作系统的底层调用,比如线程的挂起和唤醒,这样的开销相对较大。因此,尽量避免锁竞争,减少锁的持有时间,是提高并发性能的一种重要策略。

开源项目地址:https://gitee.com/falle22222n-leaves/vue_-book-manage-system

前后端总计已经 1300+ Star,2 W+ 访问!

⭐点赞⭐收藏⭐不迷路!⭐

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

西奥机电CLRT-01:重塑碳酸饮料质检新纪元

西奥机电CLRT-01:重塑碳酸饮料质检新纪元 在追求品质生活的今天,碳酸饮料的品质检测成为了行业内外关注的焦点。西奥机电,作为行业创新的领跑者,携其最新研发的CLRT-01二氧化碳气容量测试仪,为碳酸饮料行业带来了革命性…

一文详解|影响成长的关键思考(二)

之前写过一篇《一文详解|影响成长的关键思考》,里面对自己工作前几年的心法进行了总结,并分享了出来。现在又工作了一段时间后,有了一些新的体会,想进一步分析一下,于是便有了此文。的确,思考也…

LeetCode63:不同路径Ⅱ

题目描述 一个机器人位于一个 m x n 网格的左上角 (起始点在下图中标记为 “Start” )。 机器人每次只能向下或者向右移动一步。机器人试图达到网格的右下角(在下图中标记为 “Finish”)。 现在考虑网格中有障碍物。那么从左上角…

【NPS】微软NPS配置802.1x,验证域账号,动态分配VLAN(NPS篇)

NPS简介 Network Policy Server(NPS)是微软Windows Server中的一个网络服务,它作为RADIUS服务器实现,用于集中管理网络接入请求。NPS处理对网络资源的认证、授权和审计请求,通常用于控制远程访问VPN和无线网络的接入。…

Python 数据库操作- sqlite3 模块

Python sqlite3 模块 1. 安装 SQLite3 可使用 sqlite3 模块与 Python 进行集成。sqlite3 模块是由 Gerhard Haring 编写的。它提供了一个与 PEP 249 描述的 DB-API 2.0 规范兼容的 SQL 接口。用户不需要单独安装该模块,因为 Python 2.5.x 以上版本默认自带了该模块…

(动画详解)LeetCode225.用队列实现栈

. - 力扣&#xff08;LeetCode&#xff09; 题目描述 解题思路 这道题的思路就是使用两个队列来实现 入栈就是入队列 出栈就是将非空队列的前n-1个元素移动到新的队列中去 再将最后一个元素弹出 动画详解 代码实现 #define _CRT_SECURE_NO_WARNINGS 1#include <stdio.…

打车遇到臭车的底层逻辑!修炼的法门居然又捡起来了!——早读(逆天打工人爬取热门微信文章解读)

冥冥之中自有天意 引言Python 代码第一篇 洞见 热搜上“打车遇到臭车”话题&#xff0c;戳到了650万成年人的尴尬第二篇 冯站长之家 三分钟新闻早餐结尾 生命不息 探索不止 在生命的旅程中 我不断探索不断发现 永不停歇 引言 记 ​一大突破 炁​机启动 ​没想到 ​去年9月份…

【NodeMCU实时天气时钟温湿度项目 3】连接SHT30传感器,获取并显示当前环境温湿度数据(I2C)

今天&#xff0c;我们开始第三个专题&#xff1a;连接SHT30温湿度传感器模块&#xff0c;获取当前环境实时温湿度数据&#xff0c;并显示在1.3寸TFT液晶显示屏上。 第一专题内容&#xff0c;请参考 【NodeMCU实时天气时钟温湿度项目 1】连接点亮SPI-TFT屏幕和UI布局设计…

【0day漏洞复现】中移铁通禹路由器信息泄露漏洞

0x01 阅读须知 “如棠安全的技术文章仅供参考&#xff0c;此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等&#xff08;包括但不限于&#xff09;进行检测或维护参考&#xff0c;未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供…

AJAX家政系统源码部署/售后更新/搭建/上线维护

基于FastAdmin和原生微信小程序开发的一款同城预约、上门服务、到店核销家政系统&#xff0c;用户端、服务端(高级授权)、门店端(高级授权)各端相互依赖又相互独立&#xff0c;支持选择项目、选择服务人员、选择门店多种下单方式&#xff0c;支持上门服务和到店核销两种服务方式…

收放卷控制系统详细算法介绍(全伺服系统)

收放卷控制系统涉及的内容非常多,这里我们介绍全伺服系统利用电子齿轮指令实现主从轴的比例随动速度控制,收放卷控制算法介绍常用链接如下 1、收放卷+排线控制 收放卷+排线控制系统框图-CSDN博客文章浏览阅读24次。1、收放卷前馈量计算FC收放卷前馈量计算FC(CODESYS ST源代…

基于51单片机的智能导盲手杖—超声波测距

基于51单片机的智能导盲手杖 &#xff08;仿真&#xff0b;程序原理图&#xff0b;PCB设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.显示前方障碍物距离。 2.实时测量距离&#xff0c;并通过蜂鸣器提醒距离过短&#xff0c;蜂鸣器蜂鸣发出预警。 3.可以通过按键调…

IP代理对矩阵养号带来哪些帮助?

IP代理技术在矩阵养号策略中发挥着不可忽视的作用&#xff0c;特别是在当今这个信息爆炸、网络高度发达的时代。矩阵养号&#xff0c;尤其是抖音等社交媒体平台的矩阵养号&#xff0c;旨在通过精心策划和管理多个账号&#xff0c;实现内容的多元化展示、提升曝光率和互动率&…

.NET WebService \ WCF \ WebAPI 部署总结 以及 window 服务 调试

一、webservice 部署只能部署IIS上&#xff0c; 比较简单&#xff0c;就不做说明了 二、 WCF 部署 1 部署到IIS 跟部署 webservice 部署方法一样的 wcf 部署2 部署到控制台 要以管理员运行vs&#xff0c;或者 管理员运行 控制台的exe 在控制器项目中 创建IUserInfoService 接口…

AC/DC电源模块的市场发展与前景分析

BOSHIDA AC/DC电源模块的市场发展与前景分析 AC/DC电源模块是一种将交流电转化为直流电的电子设备&#xff0c;广泛应用于各种电子设备和系统中。随着电子技术的快速发展&#xff0c;AC/DC电源模块的市场也在不断扩大&#xff0c;并且具有良好的发展前景。 一&#xff0c;AC/…

【管理咨询宝藏99】离散制造智能工厂战略规划方案

本报告首发于公号“管理咨询宝藏”&#xff0c;如需阅读完整版报告内容&#xff0c;请查阅公号“管理咨询宝藏”。 【管理咨询宝藏99】离散制造智能工厂战略规划方案 【格式】PDF版本 【关键词】智能制造、先进制造业转型、数字化转型 【核心观点】 - 推进EHS、品质一致性、生…

模电·基本共集放大电路

基本共集放大电路 一、电路的组成二、静态分析三、动态分析 一、电路的组成 根据放大电路的组成原则&#xff0c;晶体管应工作在放大区&#xff0c;即 u B E > U o n {\large u\tiny BE}>{U\tiny on} uBE>Uon&#xff0c; u C E ≥ u B E {\large u\tiny CE}≥{\large…

吴恩达机器学习笔记:第 9 周-17大规模机器学习(Large Scale Machine Learning)17.3-17.4

目录 第 9 周 17、 大规模机器学习(Large Scale Machine Learning)17.3 小批量梯度下降17.4 随机梯度下降收敛 第 9 周 17、 大规模机器学习(Large Scale Machine Learning) 17.3 小批量梯度下降 小批量梯度下降算法是介于批量梯度下降算法和随机梯度下降算法之间的算法&…

全新策略打造智慧公厕,引领智慧城市公共卫生的信息化发展

智慧公厕的建设至关重要&#xff0c;要确保高质量、高效率&#xff0c;并以人民为中心。在规划方面&#xff0c;融合各种高精尖的技术是必不可少的。而在使用方面&#xff0c;提供更多贴心智能设备是体现温度的关键。让人民群众能够享受到更多的获得感、幸福感和安全感&#xf…

彩虹易支付用户中心美化主题

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 使用本主题前请备份官方版本文件再进行解压到user目录替换&#xff01;&#xff01;&#xff01; 二、效果展示 1.部分代码 代码如下&#xff08;示例&#xff09;&#xff1a; &…
最新文章