面试(03)————多线程

目录

一、线程和进程的区别?

二、并行和并发的区别? 

三、线程创建的方式有哪些? 

3.1、继承Thread类

3.2、实现Runnable接口

3.3、实现Callable接口

3.4、线程池

四、Runnable和Callable的区别?

五、在启动线程的时候,可以使用run方法吗?run()和start()有什么区别?

六、线程包含了哪些状态?状态之间是如何变化的?

七、新建T1、T2、T3三个线程,如何保证它们按顺序执行?

八、notify和notifyAll有什么区别?

九、Java中wait方法和sleep方法有什么不同?

十、如何停止一个正在运行的线程?

十一、synchronized关键字的底层原理

十二、Monitor实现的锁属于重量级锁。你了解过锁升级吗?

十三、谈谈JMM(Java内存模型)

十四、CAS

十五、乐观锁和悲观锁 

十六:谈谈你对volatile的理解 

十七、AQS 

 十八、ReentrantLock的实现原理

十九、synchronized和Lock有什么区别?

二十、死锁产生的条件?

二十一、如何进行死锁诊断?

二十二、ConcurrentHashMap

二十三、Java程序中怎么保证多线程的执行安全?(导致并发程序出现问题的根本原因是什么)

二十四、线程池的核心参数(线程池的执行原理)

二十五、线程池中有哪些常见的阻塞队列

二十六、如何确定核心线程数

二十七、线程池的种类有哪些

二十八、为什么不建议Executors创建线程池


一、线程和进程的区别?

进程:

  • 程序由指令和数据组成,但这些指令要运行,数据要读写,就必须将指令加载至CPU,数据加载至内存。在指令运行过程中还需要用到磁盘、网络等设备。进程就是用来加载指令、管理内存、管理IO的
     
  • 当一个程序被运行,从磁盘加载这个程序的代码至内存,这时就开启了一个进程。
     
  • 进程就可以视为程序的一个实例。大部分程序可以同时运行多个实例进程(例如记事本、画图、浏览器等),也有的程序只能启动一个实例进程(例如网易云音乐、360安全卫士等)

线程: 

一个进程之内可以分为一到多个线程。

一个线程就是一个指令流,将指令流中的一条条指令以一定的顺序交给CPU执行

Java中,线程作为最小调度单位,进程作为资源分配的最小单位。在windows中进程是不活动的,只是作为线程的容器

 

二、并行和并发的区别? 

并发是指系统具有处理多个任务的能力,但这并不意味着这些任务同时执行。在单核CPU的环境下,CPU通过在任务之间迅速切换(上下文切换),给人一种似乎是同时处理多个任务的错觉。因此,并发关注的是多个任务的启动、执行和完成的顺序,使得多个任务看似在“同时”执行,实际上从宏观角度是的,但从微观角度看,这些任务可能并没有在同一时刻被处理。

 

并行处理是指多个处理器或多核处理器同时处理多个任务。在这种情况下,任务确实是在同一时刻被执行。并行执行的目的是通过同时使用多个计算资源来减少程序的执行时间。它适用于那些可以被分解为可以独立执行的多个子任务的问题。

简单来说:

三、线程创建的方式有哪些? 

3.1、继承Thread类

3.2、实现Runnable接口

3.3、实现Callable接口

3.4、线程池

四、Runnable和Callable的区别?

五、在启动线程的时候,可以使用run方法吗?run()和start()有什么区别?

六、线程包含了哪些状态?状态之间是如何变化的?

线程的状态可以参考JDK中的Thread类中的枚举State

七、新建T1、T2、T3三个线程,如何保证它们按顺序执行?

八、notify和notifyAll有什么区别?

九、Java中wait方法和sleep方法有什么不同?

十、如何停止一个正在运行的线程?

十一、synchronized关键字的底层原理

十二、Monitor实现的锁属于重量级锁。你了解过锁升级吗?

十三、谈谈JMM(Java内存模型)

十四、CAS

CAS全程是:Compare And Swap(比较再交换),它体现的一种乐观锁的思想,在无锁情况下保证线程操作共享数据的原子性。

 

在JUC包下实现的很多类都用到了CAS操作

比如:  AbstractQueuedSynchronizer(AQS框架)、AtomicXXX类

CAS数据交换流程: 

一个当前内存值V、旧的预期值A、即将更新的值B,当且仅当旧的预期值A和内存值V相同时,将内存值修改为B并返回ture,否则什么都不做,并返回false。如果CAS操作失败,通过自旋的方式等待并再次尝试,直到成功

十五、乐观锁和悲观锁 

乐观锁:

它假设不会产生冲突,先去尝试执行某项操作,失败了再进行其他处理(一般都是不断循环重试)。这种锁不会阻断其他线程,也不涉及上下文切换,性能开销小。代表实现是:CAS

悲观锁:

它假设一定会发生冲突,因此获取到锁之后会阻塞其他等待线程。这样做的好处是简单安全,但是挂起线程和回复线程都需要转入内核态进行,这样做的话会带来很大的性能开销。悲观锁的代表是synchronized。然而在真实环境中,大部分时候都不会产生冲突。

十六:谈谈你对volatile的理解 

总结:

十七、AQS 

全称是 AbstractQueueSynchronizer,即抽象队列同步器。它是构建锁或者其他同步组件的基础框架

AQS基本工作机制: 

在AQS内部有一个属性state,这个state就相当于一个资源,默认是0(无锁状态),如果队列中的有一个线程修改成功了state为1,则当前线程就相当于获取了资源

QS内部维护了一个先进先出的双向队列,队列中存储的排队的线程

在对state修改的时候使用的CAS操作,保证多个线程修改的情况下原子性

AQS可以是公平锁,也可以是非公平锁

公平锁是指各个线程在加锁前先检查有无排队的队列,按排队顺序取获得锁。(新的线程到队列中等待,只让队列中的head线程获取锁,是公平锁)

非公平锁是指线程加锁前不考虑排队问题,直接尝试获取锁,获取不到再去队尾排队。值得注意的是,在AQS的实现中,一旦线程进入排队队列,即使是非公平锁,线程也需要乖乖排队(新的线程与队列中的线程共同来抢资源,是非公平锁)

 十八、ReentrantLock的实现原理

ReentrantLock 内部有两个内部类,分别是 FairSync 和 NonFairSync,对应公平锁和非公平锁。他们都继承自 Sync。Sync 又继承自AQS。

总结:

十九、synchronized和Lock有什么区别?

二十、死锁产生的条件?

二十一、如何进行死锁诊断?

二十二、ConcurrentHashMap

总结:

二十三、Java程序中怎么保证多线程的执行安全?(导致并发程序出现问题的根本原因是什么)

volatile加在共享变量上!!

总结:

二十四、线程池的核心参数(线程池的执行原理)

二十五、线程池中有哪些常见的阻塞队列

二十六、如何确定核心线程数

二十七、线程池的种类有哪些

总结:

二十八、为什么不建议Executors创建线程池

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

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

相关文章

git-生成SSH密钥

git-生成SSH密钥 1 打开命令窗口2 操作 1 打开命令窗口 选择"Git Bash Here",打开Git命令窗口 2 操作 查看当前用户名称 git config user.name配置你的邮箱,“6xxxqq.com” 填写自己的邮箱 git config --global user.email "6xxxqq…

WPF真入门教程32--WPF数字大屏项目实干

1、项目背景 WPF (Windows Presentation Foundation) 是微软的一个框架,用于构建桌面客户端应用程序,它支持富互联网应用程序(RIA)的开发。在数字大屏应用中,WPF可以用来构建复杂的用户界面,展示庞大的数据…

计算机网络错题答案汇总

王道学习 第1章 计算机网络体系结构 1.1 1.2

Nvidia 目前的市值为 3.01 万亿美元,超过苹果Apple

人工智能的繁荣将英伟达的市值推高到足以使其成为全球第二大最有价值的公司。 英伟达已成为全球第二大最有价值的公司。周三下午,这家芯片制造巨头的市值达到 3.01 万亿美元,领先于苹果公司的 3 万亿美元。 喜好儿网AIGC专区:https://heehe…

独著出书的出版流程是怎样的?

独著出书的出版流程一般包括以下几个步骤: 1. 准备书稿:确保书稿内容完整、准确,并符合出版社的要求。 2. 选择出版社:根据书稿的主题和内容,选择合适的出版社。可以考虑出版社的专业性、声誉和出版范围等因素。 3.…

2.1.4 采用配置类与注解方式使用MyBatis

实战概述:采用配置类与注解方式使用MyBatis 创建MyBatis配置类 在net.huawei.mybatis.config包中创建MyBatisConfig类,用于配置MyBatis核心组件,包括数据源、事务工厂和环境设置。 配置数据源和事务 使用PooledDataSource配置MySQL数据库连接…

Vue3【四】使用Vue2的写法写一个新的组件子组件和根组件

Vue3【四】使用Vue2的写法写一个新的组件 Vue3【四】使用Vue2的写法写一个新的组件 Vue3是向下兼容的&#xff0c;所有可以使用Vue的选项式写法 运行截图 目录结构 文件源码 App.vue <template><div class"app"><h1>你好世界! 我是App根组件<…

Java Web学习笔记13——JSON

JavaScript自定义对象 定义格式&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>Js-对…

SCT53600TVB具有反向电流保护的理想二极管控制器

4.7V至65V工作范围 – 65V反向额定电压 用于外部N沟道MOSFET的电荷泵 20mV正向压降调节 12V栅极驱动电压 带启用输入 驱动高侧外部N沟道MOSFET 1μA关断电流&#xff08;EN低&#xff09; 60μA工作静态电流&#xff08;EN高&#xff09; 2.3-A峰值…

为什么要做与运算?网关如何和ip做与运算?

在计算机网络中&#xff0c;“与运算”是一个基本而重要的概念&#xff0c;尤其在IP地址和子网掩码的处理中起着关键作用。本文将解释为什么要进行与运算&#xff0c;以及网关如何和IP地址进行与运算。 为什么要做与运算&#xff1f; 1. 确定网络地址 与运算&#xff08;AND…

常规操作-ArcGIS常用标注技巧

常规操作-ArcGIS常用标注技巧 1、简单的"&“符号&#xff1a;多字段表达只需要用”&"符号&#xff0c;多个字段之间需要空格&#xff0c;空格符号需要加双引号。 表达式为&#xff1a; [字段] & " " & [字段] 2、“VBnewline"应用…

MySQL深分页,limit 100000,10 优化

文章目录 一、limit深分页为什么会变慢二、优化方案2.1 通过子查询优化&#xff08;覆盖索引&#xff09;回顾B树结构覆盖索引把条件转移到主键索引树 2.2 INNER JOIN 延迟关联2.3 标签记录法&#xff08;要求id是有序的&#xff09;2.4 使用between...and... 我们日常做分页需…

debrief 中用到的计算方法

//累加时长方法 function calculateCumulativeSum(array, key) { return array.reduce((accumulator, currentValue, currentIndex) > { if (currentIndex 0) { accumulator[currentIndex] currentValue[key]; } else { accu…

python-15(Xpath)

1.XPath 1.1.什么是XPath XPath&#xff08;XML Path Language&#xff09;是一种用于在XML文档中定位和选择节点的语言。它是W3C&#xff08;World Wide Web Consortium&#xff09;定义的一种标准查询语言&#xff0c;广泛用于解析和操作XML文档&#xff0c;也可以操作html…

TensorBoard在pytorch训练过程中如何使用,及数据读取问题解决方法

TensorBoard 模块导入日志记录文件的创建训练中如何写入数据如何提取保存的数据调用TensorBoard面板可能会遇到的问题 模块导入 首先从torch中导入tensorboard的SummaryWriter日志记录模块 from torch.utils.tensorboard import SummaryWriter然后导入要用到的os库&#xff0…

STAT313 Chap5 多变量核密度估计带宽选择(下)

本文原创笔记&#xff0c;禁止转载。有问题可私信付费找我咨询。 直接插入法的基本步骤 步骤1&#xff1a;计算初始估计&#xff08;Pilot Estimate&#xff09; 选择一个初始的带宽矩阵 G \mathbf{G} G 和核函数 L L L 。计算初始密度估计&#xff1a; f ~ ( x , G ) 1 …

机器人舵机:关键要素解析与选择指南

在机器人技术日新月异的今天&#xff0c;舵机作为机器人的核心部件之一&#xff0c;扮演着至关重要的角色。它的性能直接关系到机器人的运动控制、稳定性以及精度等方面。那么&#xff0c;在选择和使用机器人舵机时&#xff0c;我们需要关注哪些关键要素呢&#xff1f;本文将为…

锐捷校园网自助服务系统 login_judge.jsf 任意文件读取漏洞复现(XVE-2024-2116)

0x01 产品简介 锐捷校园网自助服务系统是锐捷网络推出的一款面向学校和校园网络管理的解决方案。该系统旨在提供便捷的网络自助服务,使学生、教职员工和网络管理员能够更好地管理和利用校园网络资源。 0x02 漏洞概述 校园网自助服务系统/selfservice/selfservice/module/sc…

Nat Commun|直捣黄龙!空间单细胞组学发现外周血靶细胞亚群的组织落脚点

溃疡性结肠炎&#xff08;Ulcerative colitis&#xff0c;UC&#xff09;是一种慢性炎症性肠道疾病&#xff0c;其特征是免疫介导的黏膜炎症和上皮损伤。目前UC的治疗策略已经从单纯的症状缓解转变为更精准的靶向治疗。Vedolizumab&#xff08;VDZ&#xff09;作为一种抗整合素…

微信原生小程序开发,引入vant-weapp报错,构建npm报错

引入组件报错&#xff0c;构建npm也报错 message: NPM packages not found. Please confirm npm packages which need to build are… 解决方法&#xff1a;把 miniprogram 文件夹里的东西全部拿出来&#xff0c;文件夹目录变成下图所示&#xff0c;再把project.config.json …