八股文-多线程、并发

八股文-多线程、并发

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

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.rhkb.cn/news/427937.html

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

相关文章

电子元件制造5G智能工厂物联数字孪生平台,推进制造业数字化转型

5G智能工厂与物联数字孪生平台的融合应用,不仅为电容器制造业注入了新的活力,更为整个制造业的数字化转型树立了新的标杆。电子元件制造过程中,数字孪生平台通过实时监测生产线的各个环节,实现了生产流程的可视化监控。管理人员可…

苹果M4 MacBook Air被曝2025Q1发布 屏幕面板10月出货

9 月 20 日最新消息屏幕供应链咨询公司 DSCC 首席执行官罗斯・杨(Ross Young)昨日(9 月 19 日)在 X 平台面向其订阅用户发布推文,透露苹果 M4 MacBook Air 与低成本 iPad 的屏幕预估将于今年 10 月开始出货。 苹果正在…

海外盲盒APP为盲盒出海助力,拓展海外市场

潮玩市场是一个具有全球化的行业在全球都具有非常高的发展潜力,随着国内盲盒市场的饱和,拓展海外市场对盲盒企业至关重要。近年来,盲盒已经在海外市场取得了一定的成绩,这为企业拓展海外市场奠定了发展基础。 目前,在…

基于FPGA+GPU异构平台的遥感图像切片解决方案

随着遥感和成像技术的不断进步和普及,获取大量高分辨率的遥感图像已成为可能。这些大规模的遥感图像数据需要进行有效的处理和分析,以提取有用的信息,进行进一步的应用。遥感图像切片技术应运而生,该技术可以将大型遥感图像分割成…

[苍穹外卖]-10WebSocket入门与实战

WebSocket WebSocket是基于TCP的一种新的网络协议, 实现了浏览器与服务器的全双工通信, 即一次握手,建立持久连接,双向数据传输 区别 HTTP是短连接, WebSocket是长连接HTTP单向通信, 基于请求响应模型WebSocket支持双向通信 相同 HTTP和WebSocket底层都是TCP连接 应用场景…

Go语言练习——语法实践

目录 一、数组 1.多维数组的声明和使用 2.数组与切片的转换 3.数组在函数中的使用 二、切片 1.切片的动态扩容机制 2.切片的复制与修改 3.切片在排序算法中的应用 三、结构体 1.结构体的嵌套与方法 2.结构体与JSON的序列化 3.结构体的工厂模式 四、映射 1.映射的并发访问 2.映射…

SEGGERS实时系统embOS推出Linux端模拟器

SEGGER 发布了两个新的 embOS 仿真模拟器:embOS Sim Linux 和 embOS-MPU Sim Linux。 通过模拟 Linux 主机系统上的硬件,取代物理硬件,为开发人员提供了一种无缝的方式来构建原型和测试应用程序。 embOS Sim Linux 端口支持 32 位和 64 位系…

对商品分类系统的若干问题的思考

科学研究的目的就是研究事物的特征,并根据共同的特征加以分类 商品分类是商业,制造业中最普遍的活动,几乎所有的企业,电商平台都要对销售的商品,使用的原材料(BOM)进行分类和编号。 商品分类貌似…

从零开始学习Linux(12)---进程间通信(信号量与信号)

目录 1.信号量 2.信号 1.core功能 2.信号集 3.内核态和用户态 用户态(User Mode) 内核态(Kernel Mode) 4.volatile关键字 1.信号量 信号量是计算机科学中用于同步和互斥的一种抽象数据类型。在并发编程中&#xff…

集群聊天服务器项目【C++】项目介绍和环境搭建

前言:学习一个基于C集群聊天服务器的项目,记录学习的内容和学习的过程。 1.项目介绍 在 Linux 环境下基于 muduo 开发的集群聊天服务器。实现新用户注册、用户登录、添加好友、添加群组、好友通信、群组聊天、保持离线消息等功能。 2.技术栈 Json序列…

感谢老美苦苦相逼,逼出华为鸿蒙PC

文|琥珀食酒社 作者 | 随风 哎,告诉大家一个不好的消息 刚刚余总说 Windows PC是最后一批了 因为美国新一轮制裁又来了 但大家别急 再告诉大家一个好消息 那就是我们的鸿蒙PC要来了 今天不是华为三折叠手机和iPhone 16首发吗 估计老美是前端时间…

vue项目加载cdn失败解决方法

注释index.html文件中 找到vue.config.js文件注释、

mybatisplus乐观锁

使用方法: 1.添加version锁标记字段 2.实体类添加对应字段,并加上Version注解 3.添加配置类 Configuration public class MpComfig {Beanpublic MybatisPlusInterceptor mpInterceptor(){MybatisPlusInterceptor mpInterceptor new MybatisPlusIntercep…

人工免疫算法(AIS算法)求解实例---旅行商问题 (TSP)

目录 一、采用AIS求解 TSP二、 旅行商问题2.1 实际例子:求解 6 个城市的 TSP2.2 **求解该问题的代码**2.3 代码运行过程截屏2.4 代码运行结果截屏(后续和其他算法进行对比) 三、 如何修改代码?3.1 减少城市坐标,如下&a…

Windows环境本地部署Oracle 19c及卸载实操手册

前言: 一直在做其他测试,貌似都忘了Windows环境oracle 19c的部署,这是一个很早很早的安装记录了,放上来做个备录给到大家参考。 Oracle 19c‌:进一步增强了自动化功能,并提供了更好的性能和安全性。这个版本在自动化、性能和安全性方面进行了重大改进,以满足现代企业对数…

Serverless 安全新杀器:云安全中心护航容器安全

作者:胡志广(独鳌) 云安全中心对于 Serverless 容器用户的价值 从云计算发展之初,各大云厂商及传统安全厂商就开始围绕云计算的形态来做安全解决方案。传统安全与云计算安全的形态与做法开始发生变化,同时随着这 10 多年的发展,…

12种常见的华为杯数学建模竞赛matlab代码(建议收藏)

1.使用神经网络模型(向量量子化方法LVQ)解决分类/预测问题 clc;clear;​% 第一类蝗虫的触角和翅膀p1 [1.24, 1.27; 1.36, 1.74; 1.38, 1.64; 1.38, 1.82; 1.38, 1.90; 1.40, 1.70; 1.48, 1.82; 1.54, 1.82; 1.56, 2.08];​% 第二类蝗虫的触角和翅膀p2 [1.14, 1.82;…

小众语言ruby在苹果中的初步应用

前言 感觉Ruby在苹果系统中充当一种脚本语言来使用。 1、直接输入ruby没有反应 2、可显示结果的命令 ruby -e "puts Goodbye, cruel world!" 效果如下图: 说明苹果系统中ruby已经安装完毕,或者就是自带的。 3、编辑运行第一个ruby程序 输入…

阿里云盘bug,个人照片泄露 安当TDE透明加密完美保障数据安全

近期,阿里云盘出现了一个严重的隐私安全事件。用户在创建新相册时,系统意外地加载出了其他用户的照片,这些照片包括自拍、风景照、家人旅游照片等,引发了用户对隐私安全的担忧。阿里云盘官方对此事件迅速作出回应,确认…

ADB 安装教程:如何在 Windows、macOS 和 Linux 上安装 Android Debug Bridge

目录 一、ADB 介绍 二、Windows 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 验证 ADB 安装 4. 配置环境变量 5. 验证全局 ADB 使用 三、macOS 系统安装 ADB 1. 下载 ADB 2. 解压文件 3. 配置环境变量 4. 验证 ADB 安装 四、Linux 系统安装 ADB 1. 使用包管理器安装…