【面试实战】# 并发编程

1.线程状态

请解释 Java 中线程的几种状态,并描述每种状态的特点和转换条件。

  • NEW(新建):线程被创建,但尚未启动。
  • RUNNABLE(可运行):线程正在运行,可能在执行代码,也可能等待操作系统资源。
  • BLOCKED(阻塞):线程在等待监视器锁,以便进入同步块/方法。
  • WAITING(等待):线程等待另一个线程显式地唤醒它(例如,Object.wait()Thread.join())。
  • TIMED_WAITING(计时等待):线程等待另一个线程在指定的时间内唤醒它(例如,Thread.sleep()Object.wait(long timeout))。
  • TERMINATED(终止):线程已完成执行。

线程状态的转换条件包括线程的启动、资源竞争、同步块/方法的进入与退出、以及超时等。

2.synchronized 和 ReentrantLock

synchronizedReentrantLock 有什么区别?在什么情况下会选择使用 ReentrantLock

  • synchronized:是Java中的内置同步机制,修饰方法代码块,使用对象内部的监视器锁。简单易用,但功能有限(如不能尝试锁定、不能定时锁定)。
  • ReentrantLock:是 java.util.concurrent.locks 包中的锁,具有更多的高级功能,如可重入、可定时、可中断的锁定方式,支持公平锁和非公平锁

选择 ReentrantLock 的情况

  • 需要尝试锁定或定时锁定。
  • 需要公平锁定(顺序锁定)。
  • 需要更灵活的锁定机制和条件变量(例如 Condition)。

3.线程池

请说明 ThreadPoolExecutor 类的核心参数及其作用。你会如何调整线程池的配置来应对高并发的需求?

ThreadPoolExecutor 类的核心参数:

  • corePoolSize:核心线程数,线程池中始终保持存活的线程数。
  • maximumPoolSize:最大线程数,线程池中允许的最大线程数。
  • keepAliveTime:线程空闲时间,当线程数超过 corePoolSize 时,超时未任务的线程会被终止。
  • unit:keepAliveTime 的时间单位。
  • workQueue:任务队列,保存等待执行的任务。
  • threadFactory:线程工厂,创建新线程的方式。
  • handler:拒绝策略,当任务无法提交到线程池时的处理方式。

高并发配置建议

  • 根据任务类型调整 corePoolSize 和 maximumPoolSize。
  • 选择合适的队列(有界/无界)避免资源耗尽。
  • 使用合适的拒绝策略(如 CallerRunsPolicy)以防止任务丢失。

4.Future 和 CompletableFuture

FutureCompletableFuture 有何区别?在什么情况下你会选择使用 CompletableFuture

  • Future:表示一个异步计算的结果,可以通过 get() 方法获取计算结果,但会阻塞直到任务完成。适用于简单的异步任务。
  • CompletableFuture:扩展了 Future,提供了更丰富的 API 来进行异步任务的组合和处理(如 thenApplythenAccept)。支持链式调用和异常处理

使用 CompletableFuture 的情况

  • 需要进行多个异步任务的组合。
  • 需要非阻塞地处理异步结果。
  • 需要处理异步计算的异常。

5.阻塞队列

请介绍几种常用的阻塞队列及其适用场景。

常用的阻塞队列:

  • ArrayBlockingQueue:基于数组的有界阻塞队列。
  • LinkedBlockingQueue:基于链表的有界或无界阻塞队列。
  • PriorityBlockingQueue:支持优先级排序的无界阻塞队列。
  • DelayQueue:支持延时获取元素的无界阻塞队列。
  • SynchronousQueue:不存储元素的队列,每个插入操作必须等待对应的移除操作。

适用场景

  • ArrayBlockingQueue:固定容量的场景,避免队列过大。
  • LinkedBlockingQueue:需要动态增长的队列长度场景。
  • PriorityBlockingQueue:需要优先级处理的场景。
  • DelayQueue:需要延迟执行的任务调度场景。
  • SynchronousQueue:生产者和消费者一对一交互的场景。

6.CAS

什么是 CAS(Compare-And-Swap)?它是如何在 Java 中实现的?请描述其优缺点。

CAS(Compare-And-Swap)

  • CAS 是一种无锁算法,用于实现原子操作。通过比较内存中的某个值与预期值,如果相同则修改成新值,否则不修改。
  • 在 Java 中,CAS 通过 sun.misc.Unsafe 类中的方法实现(如 compareAndSwapInt)。

优点

  • 高效,无需阻塞线程。
  • 适合在多线程环境下保证数据一致性。

缺点

  • 可能会导致忙等待(如果 CAS 操作频繁失败)。
  • 不适合复杂的同步场景(如需要维护多个变量的一致性)。

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

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

相关文章

Maria/Mysql部署时远程连不上主机

‘主机’ is not allowed to connect to this MariaDB . 原因是设置为仅本机登录。 以root用户登录 -- 使用mysql库 use mysql; -- 查看可以登录的用户 select host,user,password from user; -- 修改root可以在任意主机登录(注意user) update user set host % where user r…

看门狗 WDG

嵌入式软件中的看门狗(Watchdog Timer, WDT)是一种监控机制,用于确保系统在出现故障时能够自动恢复正常运行。它通常由硬件定时器和相应的软件组成,当系统中的软件没有在预定时间内喂狗(即重置定时器)时&am…

Ansible Automation Platform(RHAAP2)架构中的四种节点及配置

在清单文件inventory中配置 #自动化控制节点设置 [automationcontroller] example.com #默认为混合节点 control.example node_typecontrol #作为控制节点,仅负责自动化的平台运行 hybrid.example node_typehybrid #作为混合节点,即是自动化平台又是任…

手机号码的校验

手机号码的校验 手机号码的校验应用的场景还是很多的,也随处可见,下面就记录几个校验方法 const emptyTip 请输入; // 必选项为空 const patternTip 请输入正确的; // 格式错误 // 联系电话校验(固话手机) /(^0\d{2,3}-?\d{7,8…

服务器数据恢复—KVM虚拟机被误删除如何恢复虚拟磁盘文件?

服务器数据恢复环境&故障: 1台服务器,Linux操作系统EXT4文件系统,部署了数台KVM虚拟机,每台虚拟机包含一个qcow2格式的磁盘文件,和一个raw格式的磁盘文件。 工作人员操作失误删除了3台服务器上的KVM虚拟机&#xf…

一站式的ITO服务,涵盖了业务流程外包(BPO)、IDC驻场运维以及IDC工程实施等三大类别

在信息技术日新月异的今天,企业对于信息技术服务外包(ITO服务)的需求日益增加。联通作为领先的通信服务提供商,凭借其在信息技术领域的深厚积累,为客户提供了一站式的ITO服务,涵盖了业务流程外包&#xff0…

13.4 内存管理

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

【课程系列04】某客时间AI大模型应用开发实战营

网盘链接 https://pan.baidu.com/s/1blR1eIMDIIp6AbxU4YaK9w 课程收获 "AI大模型应用开发实战营"是一个为期八周的在线课程,旨在教授学员如何开发和应用AI大模型。课程内容从基础理论到实际应用,逐步深入,覆盖了以下要点&#x…

python发邮件给多人的注意事项?如何群发?

python发邮件给多人的效率如何?python发邮件的方法? 在利用Python编程语言实现邮件群发功能时,需要注意许多细节,以确保邮件能有效送达且用户体验良好。AokSend将详细探讨python发邮件给多人时需要注意的各个方面,以帮…

Python邮件加密传输如何实现?有哪些技巧?

Python邮件怎么设置服务器?如何使用Python发送邮件? 为了确保邮件内容在传输过程中不被窃听或篡改,使用加密传输是必不可少的。在使用Python邮件传输时,加密传输是保障信息安全的关键手段。AokSend将详细探讨Python邮件加密传输的…

【C++提高编程-10】----C++ STL常用拷贝和替换算法

🎩 欢迎来到技术探索的奇幻世界👨‍💻 📜 个人主页:一伦明悦-CSDN博客 ✍🏻 作者简介: C软件开发、Python机器学习爱好者 🗣️ 互动与支持:💬评论 &…

【Python】类和对象的深入解析

目录 前言 什么是类? 定义一个类 创建对象 访问和修改属性 方法 类的继承 多态 封装 特殊方法 属性装饰器 总结 前言 Python 是一种面向对象的编程语言,它允许程序员通过类和对象来组织和管理代码。面向对象编程(OOP&#xff09…

高通平台添加设备驱动流程

高通平台添加驱动如下&#xff1a; ----------- kernel/msm-3.18/arch/arm/boot/dts/qcom/msm-pmi8950.dtsi ----------- index a714654..d6c2c57 100644 -192,7 192,13 mppa300 { reg <0xa300 0x100>; qcom,pin-nu…

力扣每日一题(2024-6-18)2288. 价格减免

本文章是对官方题解的补充说明 原题链接&#xff1a;2288. 价格减免 思路 由题目中的“单词之间用单个空格分隔”和 “如果单词的形式为美元符号后跟着一个非负实数&#xff0c;那么这个单词就表示一个 价格 。” 可知&#xff1a; 首先要通过 ‘space’把原字符串进行切分&…

PHP 标准建议psr

PSR-1: Basic Coding Standard&#xff08;基础编码标准&#xff09; PSR-1 定义了PHP代码文件的基本编写规范&#xff0c;它关注的是代码文件的结构和一些通用的编程约定&#xff0c;主要包括&#xff1a; 文件命名&#xff1a;PHP文件必须以.php为后缀。PHP标签&#xff1a…

智慧校园的构建要素是什么

在当今数字时代&#xff0c;智慧校园的构建已成为教育界的热门话题。随着技术的不断进步&#xff0c;学校不再只是传统的教学场所&#xff0c;而是一个充满智能化和创新的环境。那么&#xff0c;智慧校园的构建要素究竟是什么呢&#xff1f; 基础设施建设 高速、稳定的网络覆…

Vue的computed大致细节

computed computed具体实现流程computer的执行顺序 computed 具体实现流程 computer内部首先是标准化参数然后调用runner函数进行依赖收集设置dirty为true创建副作用函数&#xff0c;具体如下 const runner effect(getter,{//延迟执行lazy:true,//标记为computed effect 用…

pygame游戏开发

Pygame游戏开发 pygame简介 模块库请参考&#xff1a;pygame官方文档 pygame可以用作游戏开发&#xff0c;但在商业游戏中真正的开发工具却不是pygame。使用pygame开发游戏周期长。 安装pygame 在pycharm中安装第三方库pygame&#xff1a; 在计算机中安装pygame&#xf…

ElasticSearch学习篇13_《检索技术核心20讲》进阶篇之LSM树

背景 学习极客实践课程《检索技术核心20讲》https://time.geekbang.org/column/article/215243&#xff0c;文档形式记录笔记。 内容 磁盘和内存数据读取特点 工业界中数据量往往很庞大&#xff0c;比如数据无法全部加载进内存&#xff0c;无法支持索引的高效实时更新&…

Nature Electronics|微器件在柔性基底上的高密度集成(可穿戴电子/界面调控/电子皮肤/柔性电子)

2024年4月22日,韩国首尔大学Yongtaek Hong和美国斯坦福大学Byeongmoon Lee团队,在《Nature Electronics》上发布了一篇题为“A site-selective integration strategy for microdevices on conformable substrates”的论文。论文内容如下: 一、 摘要 微器件可以被集成在柔性…