Java -并发(多线程)-Interview面试题收集

news2024/11/25 4:51:33

 

1、多线程并发

1)多线程中 synchronized 锁升级的原理是什么?

synchronized 锁升级原理:在锁对象的对象头里面有一个 threadid 字段,在第一次访问的时候 threadid 为空,jvm 让其持有偏向锁,并将 threadid 设置为其线程 id,再次进入的时候会先判断 threadid 是否与其线程 id 一致,如果一致则可以直接使用此对象,如果不一致,则升级偏向锁为 轻量级锁,通过自旋循环一定次数来获取锁,执行一定次数之后,如果还没有正常获取到要使用的 对象,此时就会把锁从轻量级升级为重量级锁,此过程就构成了 synchronized 锁的升级。 锁的升级的目的:锁升级是为了减低了锁带来的性能消耗。在 Java 6 之后优化 synchronized 的实现方 式,使用了偏向锁升级为轻量级锁再升级到重量级锁的方式,从而减低了锁带来的性能消耗。

偏向锁,顾名思义,它会偏向于第一个访问锁的线程,如果在运行过程中,同步锁只有一个线程访 问,不存在多线程争用的情况,则线程是不需要触发同步的,减少加锁/解锁的一些CAS操作(比 如等待队列的一些CAS操作),这种情况下,就会给线程加一个偏向锁。 如果在运行过程中,遇 到了其他线程抢占锁,则持有偏向锁的线程会被挂起,JVM会消除它身上的偏向锁,将锁恢复到标 准的轻量级锁。

轻量级锁是由偏向所升级来的,偏向锁运行在一个线程进入同步块的情况下,当第二个线程加入锁 争用的时候,轻量级锁就会升级为重量级锁;

重量级锁是synchronized ,是 Java 虚拟机中最为基础的锁实现。在这种状态下,Java 虚拟机会阻 塞加锁失败的线程,并且在目标锁被释放的时候,唤醒这些线程。

2、线程池有什么优点?

降低资源消耗:重用存在的线程,减少对象创建销毁的开销。

提高响应速度:可有效的控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争, 避免堵塞。当任务到达时,任务可以不需要的等到线程创建就能立即执行。

提高线程的可管理性:线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统 的稳定性,使用线程池可以进行统一的分配,调优和监控。

附加功能:提供定时执行、定期执行、单线程、并发数控制等功能。

3、ThreadPoolExecutor饱和策略有哪些?

如果当前同时运行的线程数量达到最大线程数量并且队列也已经被放满了任时,ThreadPoolTaskExecutor 定 义一些策略:

ThreadPoolExecutor.AbortPolicy:抛出 RejectedExecutionException来拒绝新任务的处理。

ThreadPoolExecutor.CallerRunsPolicy:调用执行自己的线程运行任务。您不会任务请求。但是 这种策略会降低对于新任务提交速度,影响程序的整体性能。另外,这个策略喜欢增加队列容量。 如果您的应用程序可以承受此延迟并且你不能任务丢弃任何一个任务请求的话,你可以选择这个策 略

(当前线程调用线程池处理多线程任务,线程池队列满了,那么就会用当前调用多线程的线程,即用户线程来执行当前需要执行的多线程任务===影响性能,但是不会丢失任务)

ThreadPoolExecutor.DiscardPolicy:不处理新任务,直接丢弃掉。 ThreadPoolExecutor.DiscardOldestPolicy: 此策略将丢弃最早的未处理的任务请求。

4、ThreadPoolExecutor线程池的执行原理?

5、如何合理分配线程池大小?

要合理的分配线程池的大小要根据实际情况来定,

简单的来说的话就是根据CPU密集和IO密集来 分配

什么是CPU密集 CPU密集的意思是该任务需要大量的运算,而没有阻塞,CPU一直全速运行。 CPU密集任务只有在真正的多核CPU上才可能得到加速(通过多线程),而在单核CPU上,无论你开 几个模拟的多线程,该任务都不可能得到加速,因为CPU总的运算能力就那样。

什么是IO密集 IO密集型,即该任务需要大量的IO,即大量的阻塞。在单线程上运行IO密集型的任务会导致浪费 大量的CPU运算能力浪费在等待。所以在IO密集型任务中使用多线程可以大大的加速程序运行, 即时在单核CPU上,这种加速主要就是利用了被浪费掉的阻塞时间。

分配CPU和IO密集: 1. CPU密集型时,任务可以少配置线程数,大概和机器的cpu核数相当,这样可以使得每个线程都在 执行任务 2. IO密集型时,大部分线程都阻塞,故需要多配置线程数,2*cpu核数 精确来说的话的话:

从以下几个角度分析任务的特性: 任务的性质:CPU密集型任务、IO密集型任务、混合型任务。 任务的优先级:高、中、低。 任务的执行时间:长、中、短。 任务的依赖性:是否依赖其他系统资源,如数据库连接等。

可以得出一个结论: 线程等待时间比CPU执行时间比例越高,需要越多线程。 线程CPU执行时间比等待时间比例越高,需要越少线程。

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

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

相关文章

Mabatis Plus 之ID生成策略控制(Auto、Input、assign_id、assign_uuid)

文章目录 知识点1:TableId1 环境构建2 代码演示AUTO策略步骤1:设置生成策略为AUTO步骤2:删除测试数据并修改自增值步骤3:运行新增方法 INPUT策略步骤1:设置生成策略为INPUT步骤2:添加数据手动设置ID步骤3:运行新增方法 ASSIGN_ID策略步骤1:设置生成策略为ASSIGN_ID步…

HTTPS的工作流程

hi,大家好,好久不见,今天为大家带来HTTPS协议的工作流程 认识HTTPS 加密是什么 HTTPS的工作流程 1.认识HTTPS HTTPS也是应用层协议,让我们再来回忆一下TCP/IP五层协议模型 HTTPS 也是一个应用层协议. 是在 HTTP 协议的基础上引入了一个加密层. HTTP协议在传输的时候是以…

2023河海大学838计算机学硕考研高分经验分享

大家好,我是陪你考研每一天的大巴学长。 大巴学长为大家邀请到了2023年838计算机学硕初试第二名的高分学长,为大家分享一下他的考研经验,经验里详细介绍了各科的复习方法,很有参考意义。 希望对大家有所借鉴和帮助,在…

C++13-STL模板-01向量(vector)

C13-STL模板 在线练习: http://noi.openjudge.cn/ https://www.luogu.com.cn/ 大纲要求 【 3 】算法模板库中的函数:min、max、swap、sort 【 4 】栈 (stack)、队列 (queue)、链表 (list)、 向量(vector)等容器 1.函数模板 泛…

HNU数据结构与算法分析-作业1-算法分析

1. (简答题) 1.(教材3.4)(a)假设某一个算法的时间代价为 ,对于输入规模n,在某台计算机上实现并完成该算法的时间为t秒。现在另有一台计算机,运行速度为第一台的64倍,那么t秒内新机器…

FreeRTOS(5)----互斥量

一,互斥信号量 互斥信号量是一个具有优先级继承的二值信号量,在同步的应用中二值信号量最合适。互斥信号量适合互斥访问的那些应用。在互斥访问中互斥信号量相当于一个钥匙,当一个任务使用这个资源,资源就会被上锁,防…

[CTF/网络安全] 攻防世界 robots 解题详析

[CTF/网络安全] 攻防世界 robots 解题详析 robots.txt姿势总结 题目描述:X老师上课讲了Robots协议,小宁同学却上课打了瞌睡,赶紧来教教小宁Robots协议是什么吧。 进入靶机,页面空白。 查看页面源代码: 再次结合题目Rob…

Java常用工具之StringUtils类

目录 一、字符串判空二、分隔字符串三、判断是否为纯数字四、将集合拼接成字符串五、其他方法 字符串(String)在我们的日常工作中,用得非常非常非常多。 在我们的代码中经常需要对字符串判空,截取字符串、转换大小写、分隔字符串、…

chatgpt赋能Python-python3_取模

Python3 取模:介绍与使用 在Python3中,取模运算是比较常用的运算符。本文将介绍Python中的取模运算符,并分享多种使用取模运算符的方法。 什么是取模运算符 在数学上,取模运算是将一个整数除以另一个整数,然后返回相…

后端传到前端的JSON数据大写变小写--2023

问题复现:1. 首先我先说一下,我用了lombok,事实证明和这个也有关系 前端这里写的也是按照驼峰命名来写的 控制台打印出来的数据 后台打印出来的数据 解决方法: 1. 重写get/set方法 因为我在实体类上标注了Data注解 重写get/se…

电动力学专题:闵氏几何(伪欧几何)

相对性原理和光速不变 物理定律在所有的惯性参考系里都是平等的,不存在一个特殊的惯性系。真空中的光速在所有的惯性系里都是一样的。 洛伦兹变换 距离度量:闵氏(Mins geometry) 狭义相对论下,不随惯性系变化的量闵式距离(时空间…

HNU数据结构与算法分析-作业2-线性结构

1. (简答题) 4.1 假设一个线性表包含下列元素&#xff1a; <|2,23,15,5,9> 使用Shaffer编写的教材《数据结构与算法分析》的List ADT编写一些C语句&#xff0c;删除值为15的元素。 &#xff08;要求&#xff1a;采用C或C语言描述算法&#xff09; 4.6 使用Shaffer编写…

[CTF/网络安全] 攻防世界 cookie 解题详析

[CTF/网络安全] 攻防世界 cookie 解题详析 HTTP响应的查看方法method 1method 2 总结 题目描述&#xff1a;X老师告诉小宁他在cookie里放了些东西&#xff0c;小宁疑惑地想&#xff1a;这是夹心饼干的意思吗&#xff1f; 根据提示&#xff0c;获取页面Cookie中的数据即可 页面提…

学生成绩信息管理系统

系列文章 任务2 学生成绩信息管理系统 文章目录 系列文章一、实践目的与要求1、目的2、要求 二、课题任务三、总体设计1.存储结构及数据类型定义2.程序结构3.所实现的功能函数4、程序流程图 四、小组成员及分工五、 测试score.txtbk.txt界面展示显示所有学生信息添加学生信息删…

【数据结构】数据结构中的栈

文章目录 前言什么是栈栈的实现栈的初始化入栈出栈栈的判空栈内有效数据个数返回栈顶数据栈的销毁 前言 该篇文章来了解数据结构中的栈&#xff0c;栈与队列都为一种线性存储结构&#xff0c;同时栈与队列在逻辑结构上&#xff0c;都只能在头或者尾进行对数据的操作&#xff1…

25 KVM管理虚拟机-虚拟机安全启动

文章目录 25 KVM管理虚拟机-虚拟机安全启动25.1 总体介绍25.1.1 概述25.1.2 功能说明25.1.3 约束限制 25.2 安全启动实践25.2.1 虚拟机配置25.2.2 证书导入25.2.3 安全启动观测 25 KVM管理虚拟机-虚拟机安全启动 25.1 总体介绍 25.1.1 概述 安全启动&#xff08;Secure Boot…

基于JAVA的高校宿舍管理系统的设计与实现(论文+源码)_kaic

目 录 1 绪论 1.1 研究背景 1.2 研究目的和意义 1.3 课题任务 1.4 本文结构 2 开发工具及技术介绍 2.1 开发工具介绍 2.2 开发技术介绍 3 系统分析 3.1 可行性分析 3.2 需求分析 4 系统设计 4.1 系统结构设计 4.2 系统功能模块设计 4.3 业务时序设计 4.4 住宿流程设计 4.5 数…

CSS-预编译器-Sass

前言 Sass 是一款强化 CSS 的辅助工具&#xff0c;它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能&#xff0c;这些拓展令 CSS 更加强大与优雅。使用 Sass 以及 Sass 的样式库&#xff08;如 Compass&am…

【MySQL】MySQL基础知识详解

文章目录 1. MySQL概述1.1 数据库相关概念1.1.1 数据库、数据库管理系统与SQL1.1.2 关系型数据库与数据模型 1.2 MySQL数据库1.2.1 MySQL的安装与配置1.2.2 MySQL服务的启动与停止1.2.3 连接MySQL服务端 2. SQL2.1 SQL简介2.2 DDL2.2.1 数据库操作2.2.2 表操作2.2.2.1 创建表2.…

无任何格外需求的命令行C++飞机大战,内含BOSS,动画,万行代码!免费奉上!

个程序的源码没有什么技术要求&#xff0c;一般至少能看懂95%&#xff0c;因为博主是大一上学期写着玩的&#xff0c;当写了一周&#xff0c;还拿它参加了学校的创意编程比赛&#xff0c;结果第一用的ui&#xff0c;直接降维打击了&#xff0c;拿了个二等奖 操作方法游戏内都有…