八股文-多线程、并发

八股文-多线程、并发

最近学到了一种方法,可以用于简历项目经验编写以及面试题目的回答

STAR法则:在什么背景下,你需要解决什么问题,你做了啥,得到了什么结果
情境(Situation): 描述你面对的特定情境或背景。
任务(Task): 说明你面临的具体任务或挑战。
行动(Action): 阐述你采取了什么行动来解决问题或完成任务。
结果(Result): 指出你的行动带来了什么结果,以及你取得了什么成就。
参考:https://blog.csdn.net/qq_37037348/article/details/139144523

多线程是啥?为啥要有多线程?

在单个程序中可以同时运行多个线程执行不同的任务。学习了一个操作系统上面运行多个进程的方法,一个进程上面用多个线程管理。计算机最早出现的时候还没有操作系统,程序直接运行在计算机上,这样一个计算机的功能有限,资源利用率也不高。所以就出现了操作系统,通过进程的方式实现一个计算机可以同时运行多个程序,同时一个程序里面又需要处理多种任务,如果所以任务用一个线程来执行,那么多个任务只能排队处理,同样效率低下,无法好好的利用资源(内存、磁盘IO、CPU等)。
并行处理、充分利用资源 → 提高性能和效率、改善用户体验

使用多线程带来的问题?

线程安全问题(一致性问题)、死锁(相互等待)、资源争抢(CPU时间、内存、I/O)、编程复杂、可见性(内存分为工作内存和主内存,这样做主要是为了提高效率)、有序性问题(指令重排)

怎么解决这些问题?

同步机制(volatile、synchronized、原子类、Lock显式锁)

指令重排是什么?为啥要指令重排?

编译器或者处理器对指令执行顺序进行调整,为了提高执行效率。对于重排的指令会遵循以下原则:不影响单线程执行的语义。但是多线程就不能够保证了(会出现可见性问题、有序性问题)。多线程下正常执行语句也不能够保证原子性,所以基于这两种场景,为了保证并发安全性,就出现了锁和其他的一些机制。主要包括volatile,synchronized,显式锁,原子类等

解决指令重排的方法:
Java提供了一些机制来解决指令重排带来的问题:

volatile关键字:通过使用volatile关键字,可以确保变量的读写操作对所有线程都是可见的,并且保证操作的有序性。volatile变量的写操作对任意后续的volatile变量的读操作都是可见的。(内存屏障阻止重排序,https://juejin.cn/post/6901283327160877063)

synchronized关键字:使用synchronized可以确保同一时间只有一个线程可以执行同步代码块,从而保证操作的原子性和有序性。

final关键字:对于final字段,一旦初始化完成,其值就不会被改变。这可以确保在构造函数中对final字段的赋值在构造函数结束后对其他线程是可见的。

原子类:Java提供了一系列的原子类(如AtomicInteger),这些类利用CAS(Compare-And-Swap)操作来保证操作的原子性,从而避免指令重排的问题。

指令重排为啥能够提高执行效率?

这个就是编译器和处理器做的一些优化,主要原则是提高各个硬件(CPU、内存、寄存器)的利用率,减少空闲时间

volatile是啥?有什么用?

这个就得说到JMM,Java内存模型(Java Memory Model,简称JMM)。内存模型把内存分为线程工作内存和主内存。加了volatile修饰的变量就会直接利用本地内存,这样多个线程set操作会直接从线程内存同步到主内存,get操作会直接从主内存同步到线程内存。
JMM的三个核心特性包括:

可见性:确保一个线程对共享变量的修改能够及时地被其他线程观察到。例如,使用volatile关键字修饰的变量,可以保证对该变量的读写操作对所有线程都是即时可见的。

原子性:确保操作是不可分割的,即当一个线程执行原子操作时,其他线程不能插入执行其他操作。Java中的原子操作包括对基本数据类型的赋值操作,以及synchronized块或方法。

有序性:JMM通过happens-before关系来确保操作的有序性。如果一个操作A happens-before 操作B,那么在执行操作B之前,操作A的结果已经对操作B可见,且操作A的执行顺序在操作B之前。

指令重排序破坏了可见性和有序性。
参考:https://www.jianshu.com/p/a67dc1c11088
双层校验锁:https://www.jianshu.com/p/c6a42c543abf

线程的生命周期

https://www.jianshu.com/p/c22ff5cc4a8f
在这里插入图片描述

synchronized底层实现?锁升级?

synchronized 和 lock的区别

https://blog.csdn.net/qq_32907195/article/details/108906260

怎么使用多线程?

继承Thread、实现Runnable接口、实现Callable接口(可以根据FutureTask拿到返回结果)、线程池
参考:
https://zhuanlan.zhihu.com/p/334737925
https://www.cnblogs.com/java1024/p/11950129.html
https://blog.csdn.net/weixin_44797490/article/details/91006241

线程池怎么用?原理?执行流程是咋样的?

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

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

相关文章

软件测试分类篇(上)

目录 引言: 一、为什么要对软件测试进行分类 二、按照测试目标分类 1. 界面测试 2. 功能测试 3. 性能测试 4. 可靠性测试 5. 安全性测试 6. 易用性测试 三、按照执行方式分类 1. 静态测试 2. 动态测试 四、按照测试方法分类 1. 白盒测试 2. 黑盒测试 …

HTTP 教程

HTTP/HTTPS 简介 HTTP(Hypertext Transfer Protocol,超文本传输协议)和 HTTPS(Hypertext Transfer Protocol Secure,超文本传输安全协议)是用于在网络中传输信息的两种主要协议。它们定义了客户端和服务器…

10.1 溪降技术:通讯

目录 10.1 通讯概述观看视频课程电子书:通讯视觉信号想象一下…… 声音信号总结 10.1 通讯 概述 两名队友讨论下一个跳点 溪降是一项团队活动,需要团队成员之间良好的沟通。由于溪降所处的环境特性,往往使得声音通讯变得困难。环境可能非常嘈…

自动化测试常用函数

目录 一、元素的定位 1、cssSelector 2、xpath (1)xpath 语法 1、获取HTML页面所有的节点 2、获取HTML页面指定的节点 3、获取一个节点中的直接子节点 4、获取一个节点的父节点 5、实现节点属性的匹配 6、使用指定索引的方式获取对应的节点内容…

欧美海外仓系统有哪些服务商选择?

在跨境电商的全球化浪潮中,欧美市场以其成熟的电商生态和庞大的消费群体,成为了众多跨境卖家竞相争夺的高地。为了提升物流效率、降低成本并增强客户体验,海外仓成为了不可或缺的一环。而海外仓系统的选择,则直接关系到仓库的运营…

排序-----选择排序

首先介绍几种排序的分类: 选择排序是每次都遍历,标记出最小的元素,然后把它放在前面。 本文介绍优化后的版本:每次遍历标记出最小的和最大的元素,分别放到前面和后面。(注意这里是找到对应的下标&#xff0…

数据结构与算法——Java实现 6.递归

要学会试着安静下来 —— 24.9.17 一、递归的定义 计算机科学中,递归是一种解决计算问题的方法,其中解决方案取决于同一类问题的更小子集 说明: ① 自己调用自己,如果说每个函数对应着一种解决方案,自己调用自己意味着解决方案是…

2024/9/20 使用QT实现扫雷游戏

有三种难度初级6x6 中级10x10 高级16x16 完成游戏 游戏失败后&#xff0c;无法再次完成游戏&#xff0c;只能重新开始一局 对Qpushbutton进行重写 mybutton.h #ifndef MYBUTTON_H #define MYBUTTON_H #include <QObject> #include <QWidget> #include <QPus…

jdk版本更换以及遇到的问题略谈(以jdk1.8和jdk11为例)

目录 在我看来 遇到的问题 原因以及解决方法 方法一&#xff1a;禁止误改误删 方法二&#xff1a;bat文件驱动运行 方法三&#xff1a;cmd命令 方法四&#xff1a;修改注册表&#xff08;不推荐&#xff09; 最近在进行漏洞复现&#xff08;shiro550&#xff09;的时候&…

DAY20信息打点-红蓝队自动化项目资产侦察武器库部署企查产权网络空间

2.自动化-网络空间-AsamF 1.去GitHub上下载项目之后使用CMD打开 2.输入命令AsamF_windows_amd64.exe -v生成配置文件 3.AsamF会在~/.config/asamf/目录下生成config.json文件 C:\Users\Acer\.config\asamf 5.根据文档输入命令去查询所需信息&#xff08;已经没有用了&#x…

jeecg自定义sql查询,并使用高级查询的参数

jeecg框架的高级查询界面如下 后台代码&#xff1a; controller层&#xff1a; GetMapping(value "/list")public Result<IPage<Receiver>> queryPageList(Receiver receiver,RequestParam(name"pageNo", defaultValue"1") Integ…

进程和线程问题解答

线程和进程的概念、区别 进程是操作系统进行资源分配的基本单位&#xff0c;拥有独立的地址空间&#xff0c;包括代码、数据、堆、栈等。进程间的切换开销较大。 线程是进程中的一个执行单元&#xff0c;是系统中最小的执行单位&#xff0c;共享进程的资源&#xff0c;如代码…

Python类及元类的创建流程

Python类及元类的创建流程 代码运行结果再看type和object的关系和约定type和object具有的方法不一样看代码和运行结果&#xff0c;可以完全理解python的执行过程。再补充几点&#xff0c; 代码 class MetaCls(type):print(0>>>, MetaCls, 0)def __init__(self, name,…

基于微型5G网关的酒店服务机器人应用

智能机器人在酒店中已经越来越常见&#xff0c;并且也是提升客户体验、提高服务效率的重要工具。然而&#xff0c;尽管这些机器人在自动化服务方面可以发挥着重要作用&#xff0c;但它们仍然面临着一些通信、组网和在线管理方面的痛点。 针对这些难题&#xff0c;可以通过部署微…

Python边界值测试工具:生成指定大小文件

在进行软件测试的过程中&#xff0c;经常会有文件上传功能的需求&#xff08;例如头像上传、商品图上传等&#xff09;&#xff0c;这时候就需要考虑文件大小的边界值&#xff0c;例如只可上传1-2MB的图片&#xff0c;5-10MB的文件&#xff0c;想要验证需求的话&#xff0c;就需…

CVPT: Cross-Attention help Visual Prompt Tuning adapt visual task

论文汇总 当前的问题 图1:在VTAB-1k基准测试上&#xff0c;使用预训练的ViT-B/16模型&#xff0c;VPT和我们的CVPT之间的性能和Flops比较。我们将提示的数量分别设置为1、10、20、50,100,150,200。 如图1所示&#xff0c;当给出大量提示时&#xff0c;VPT显示了性能的显著下降…

电脑ip会因为换了网络改变吗

在当今数字化时代&#xff0c;IP地址作为网络世界中的“门牌号”&#xff0c;扮演着至关重要的角色。它不仅是设备在网络中的唯一标识&#xff0c;也是数据交换和信息传递的基础。然而&#xff0c;对于普通用户而言&#xff0c;一个常见的问题便是&#xff1a;当电脑连接到不同…

三菱变频器Modbus-RTU 通讯规格

能够从变频器的 RS-485 端子使用 Modbus-RTU 通讯协议&#xff0c;进行通讯运行和参数设定。 NOTE: 1、使用 Modbus-RTU 通讯协议时&#xff0c;请设定Pr.549 协议选择 “1” 2、从主机按地址0(站号0)进行hodbus-RTU通讯时&#xff0c;为广播通讯&#xff0c;变频器不向主机发…

QT编译后,如何手动运行,或复制到其他机器运行

编译后&#xff08;文件名叫Work.exe&#xff09;&#xff0c;通过QT功能&#xff0c;是可以成功运行的。如果在目录中双击&#xff0c;或复制到其他机器上运行&#xff0c;就会失败。怎么办&#xff1f; 打开命令窗口 运行命令 D:\Work\build\release>windeployqt Work.e…

写论文去哪个网站?2024最佳五款AI毕业论文学术网站

在2024年&#xff0c;AI技术在学术写作领域的应用已经变得越来越普遍。为了帮助学生和研究人员更高效地完成毕业论文的撰写任务&#xff0c;市场上涌现了许多优秀的AI论文写作工具。本文将重点推荐五款最佳的AI毕业论文学术网站&#xff0c;并特别强调千笔-AIPassPaper的优势。…