面试笔记-多线程篇

为什么不直接调用run方法而是调用start方法?

start方法会先创建一条线程,再用创建出的新线程去执行对应的run方法,这样才是起到多线程效果,如果直接调用run方法,则只是在原线程执行。

线程的sleep方法和wait方法的区别?

首先这两个方法都是让当前线程暂停执行一段时间,sleep方法属于Thread类的静态方法,让当前线程暂停执行,但不释放对象锁,到指定时间自动唤醒,通常用于简单的暂停操作,不涉及对象状态变更;wait方法是Object类的方法,必须在同步代码块或同步方法中调用,暂停时会释放当前线程持有的锁,需要调用notify或者notifyAll方法唤醒,通常用于线程间的通信,等待某个条件的发生。

什么是乐观锁和悲观锁?

悲观锁: 悲观锁在操作数据时比较悲观,认为别人会同时修改数据,因此操作数据时会把数据锁住,直到操作完才会释放锁;
乐观锁: 乐观锁在操作数据时非常乐观,认为别人不会同时修改数据,乐观锁不会上锁,只是在执行更新操作的时候判断一下数据有没有被修改,被修改则放弃操作,否则执行操作。

什么是CAS?

CompareAndSwap,比较与交换,主要是通过处理器的指令来保证操作的原子性,cas指令包含3个参数,共享变量内存地址的值v、预期值A以及要修改的新值B,当内存地址值与预期值相等时,才把内存地址值更新为新值B,否则不做任何操作。

说说你对原子性、可见性、有序性的理解?

原子性:是指一个操作是不可分割、不可中断的,要么全部执行并且不被打断,要么就都不执行,synchronized可以保证原子性;
可见性:是指一个线程修改了某一共享变量的值时,其他线程能够立即知道这个修改,volatile、final、synchronized可以保证可见性;
有序性:是指对于一个线程的执行代码,从前往后依次执行,单线程下可以认为程序是有序的,并发情况可能会发生指令重排序,volatile、synchronized可以保证有序性。

synchronized加锁维度?

修饰实例方法: 相当于当前对象实例加锁
修饰静态方法: 给当前类加锁
修饰代码块: this对象实例加锁 xxx.class给类加锁

对死锁的了解及避免方案?

死锁是指两个或两个以上的线程在执行过程中,因竞争资源而造成互相等待、互相阻塞的现象,在无外力作用的情况下,这些线程将一直阻塞下去
死锁的产生必须具备四个条件:
互斥使用: 资源只能同时只由一个线程占用,如果此时还有其他线程请求获取该资源,需要等待占有资源线程释放该资源;
请求与保持: 资源请求者在请求其他资源的同时,不会释放已占有资源;
不可抢占: 资源请求者不能强行从其他线程抢占资源,只能由资源持有者主动释放资源;
循环等待: 两个或两个以上线程在占用自己资源同时,相互抢占对方资源从而相互等待对方释放资源。
避免死锁方法:
破坏请求与保持: 一次性获取全部的资源;
破坏不可抢占: 线程请求资源时,如果申请失败,主动释放自己占有资源;
破坏循环等待: 按顺序申请资源,避免环路申请资源。

线程有哪些状态?

‌NEW(新建状态): Thread线程对象已经创建,但尚未调用start方法创建线程;
RUNNABLE(可运行状态): 调用start方法进入已就绪状态,该状态的线程随时可以调度运行或者已经在CPU上运行;
BLOCKED(阻塞状态): 由锁竞争引起的阻塞状态,给多个线程加上同一个锁,当有一个线程拿到锁后,剩下的线程就进入阻塞状态;
WAITING(不限时等待状态): 线程无限期的等待某个条件发生,比如调用另一线程不带参数的join方法等待对方执行完成或者调用wait方法等待;
TIMED_WAITING(限时等待状态): 有时间限制的阻塞等待,比如使用带参数的join或wait方法;
TERMINATED(终止状态): 线程执行完毕或者因异常退出run方法后,线程结束生命周期。

线程池有哪些状态?

RUNNING: 线程处于运行状态,可以接收新任务,也会处理等待队列中的任务;
SHUTDOWN: 表示线程池不再接收新任务,但会继续执行已经提交的任务(包括队列中的任务),RUNNING状态调用shutdown方法进入SHUTDOWN状态;
STOP: 表示线程池不再接收新任务,并且会尝试中断正在执行的任务,同时清空任务队列,RUNNING状态调用shutdownNow方法进入STOP状态;
TIDYING: 表示线程池的所有任务都已终止,工作线程数量为0,线程池即将进入TERMINATED状态,当SHUTDOWN状态任务队列为空,且所有任务执行完毕或者STOP状态任务队列为空,所有任务都
已终止时会进入TIDYING状态;
TERMINATED: 表示线程池已经彻底关闭,所有任务都已完成,所有工作线程都已销毁,TIDYING状态时调用terminated方法执行完毕进入TERMINATED状态。

线程池的工作流程?

刚创建时,线程池里是没有线程的,当调用execute方法添加一个任务时,会判断
a,如果正在运行的线程数量小于corePoolsize(核心线程数),就会创建线程并执行这个任务;
b.如果正在运行的线程数量大于或等于corePoolsize(核心线程数),就会把这个任务放入队列;
c.如果这个时候队列满了,而且正在运行的线程数量小于maximumPoolSize(最大线程数),就会创建非核心线程并执行这个任务;
d.如果这个时候队列满了,而且正在运行的线程数量大于或等于maximumPoolSize(最大线程数),就会根据配置的拒绝策略来处理任务;
当一个线程执行完任务,就会从队列里取下一个任务来执行,当一个线程无事可做,超keepAliveTime(空闲线程存活时间),线程池会判断当前运行的线程数量是否大于corePoolsize(核心线程数),如果大于则停掉线程,最终恢复到corePoolsize(核心线程)。

线程池有哪些拒绝策略?

AbortPolicy: 默认策略,直接抛出异常
CallerRunsPolicy: 用调用者所在的线程来执行任务
DiscardoldestPolicy: 丢弃队列里时间最早的任务,也就是即将执行的任务
DiscardPolicy: 当前任务直接丢弃,不做任何处理

线程池怎么接收异常?

try catch捕获异常
submit执行,future.get()接收异常
重写ThreadPoolExecutor.afterExecute方法处理接收的异常

更多内容正在更新中…

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

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

相关文章

解锁反序列化漏洞:从原理到防护的安全指南

目录 前言 一、什么是反序列化 二、反序列化漏洞原理 三、反序列化漏洞的危害 (一)任意代码执行 (二)权限提升 (三)数据泄露与篡改 四、常见的反序列化漏洞场景 (一)PHP 反…

UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理

UE虚幻引擎No Google Play Store Key:No OBB found报错如何处理? 问题描述: UE成功打包APK并安装过后,启动应用时提示: No Google Play Store KeyNo OBB found and no store key to try to download. Please setone …

Text2Sql:开启自然语言与数据库交互新时代(3030)

一、Text2Sql 简介 在当今数字化时代,数据处理和分析的需求日益增长。对于众多非技术专业人员而言,数据库操作的复杂性常常成为他们获取所需信息的障碍。而 Text2Sql 技术的出现,为这一问题提供了有效的解决方案。 Text2Sql,即文…

八大排序算法细讲

目录 排序 概念 运用 常见排序算法 插入排序 直接插入排序 思想: 步骤(排升序): 代码部分: 时间复杂度: 希尔排序 思路 步骤 gap的取法 代码部分: 时间复杂度: 选择排序 直接选…

基于MODIS/Landsat/Sentinel/国产卫星遥感数据与DSSAT作物模型同化的作物产量估算

基于过程的作物生长模拟模型DSSAT是现代农业系统研究的有力工具,可以定量描述作物生长发育和产量形成过程及其与气候因子、土壤环境、品种类型和技术措施之间的关系,为不同条件下作物生长发育及产量预测、栽培管理、环境评价以及未来气候变化评估等提供了…

【容器技术01】使用 busybox 构建 Mini Linux FS

使用 busybox 构建 Mini Linux FS 构建目标 在 Linux 文件系统下构建一个 Mini 的文件系统,构建目标如下: minilinux ├── bin │ ├── ls │ ├── top │ ├── ps │ ├── sh │ └── … ├── dev ├── etc │ ├── g…

排序算法与查找算法

1.十大经典排序算法 我们希望数据以一种有序的形式组织起来&#xff0c;无序的数据我们要尽量将其变得有序 一般说来有10种比较经典的排序算法 简单记忆为Miss D----D小姐 时间复杂度 &#xff1a;红色<绿色<蓝色 空间复杂度&#xff1a;圆越大越占空间 稳定性&…

使用多模态大语言模型进行深度学习的图像、文本和语音数据增强

在过去的五年里&#xff0c;研究方向已从传统的机器学习&#xff08;ML&#xff09;和深度学习&#xff08;DL&#xff09;方法转向利用大语言模型&#xff08;LLMs&#xff09;&#xff0c;包括多模态方法&#xff0c;用于数据增强&#xff0c;以提高泛化能力&#xff0c;并在…

PCA9685舵机控制板使用

1. 概述 PCA9685 是一款由 NXP 半导体公司生产的 16 通道 PWM 驱动器&#xff0c;广泛应用于多个舵机、LED 灯带控制等场景。它通过 I2C 总线与主控芯片&#xff08;如 STM32&#xff09;通信&#xff0c;可以高效地控制多个舵机的运动和多通道 PWM 输出。该模块适用于多舵机控…

2025.2.6(c++杂项补充及qt基础介绍)

作业 1> 完善C的思维导图 2> 重新创建一个新的项目&#xff0c;将默认提供的代码进行注释 3> QT的思维导图 4> 刷2个 98 C 牛客网上的题 笔记&#xff08;后期复习补上&#xff09;

Postgresql的三种备份方式_postgresql备份

这种方式可以在数据库正在使用的时候进行完整一致的备份&#xff0c;并不阻塞其它用户对数据库的访问。它会产生一个脚本文件&#xff0c;里面包含备份开始时&#xff0c;已创建的各种数据库对象的SQL语句和每个表中的数据。可以使用数据库提供的工具pg_dumpall和pg_dump来进行…

京准:NTP卫星时钟服务器对于DeepSeek安全的重要性

京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 京准&#xff1a;NTP卫星时钟服务器对于DeepSeek安全的重要性 在网络安全领域&#xff0c;分布式拒绝服务&#xff08;DDoS&#xff09;攻击一直是企业和网络服务商面临的重大威胁之一。随着攻击技术的不断演化…

S4 HANA (递延所得税传输)Deferred Tax Transfer - S_AC0_52000644

本文主要介绍在S4 HANA OP中S4 HANA (递延所得税传输)Deferred Tax Transfer - S_AC0_52000644的后台配置及前台操作。具体请参照如下内容&#xff1a; 目录 Deferred Tax Transfer - S_AC0_52000644 1. 后台配置 1.1 Business Transaction Events激活- FIBF 2. 前台操作 …

Redis --- 使用GEO实现经纬度距离计算

什么是GEO&#xff1f; Spring Boot 项目中可以通过 Spring Data Redis 来使用 Redis GEO 功能&#xff0c;主要通过 RedisTemplate 和 GeoOperations 接口来操作地理位置数据。 Service public class GeoService {Autowiredprivate RedisTemplate<String, Object> red…

【中间件】 Kafka

1.先导知识&#xff1a; 消息队列MQ(Message Queue): 将需要传输的数据临时(设置有效期)存放在队列中,进行存取消息消息队列中间件&#xff1a; 用来存储消息的中间件(组件) 2.消息队列的应用场景 异步处理 为什么要使用消息队列&#xff1f; 比较耗时的操作放在其他系统中…

android 打包AAR-引入资源layout-安卓封包

Override protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_cyberwin_devicescanner);mListView (ListView) this.findViewById(R.id.result);mListView.setAdapter(mListAdapter);

问卷数据分析|SPSS之分类变量描述性统计

1.点击分析--描述统计--频率 2. 选中分类变量&#xff0c;点击中间箭头 3.图表选中条形图&#xff0c;图表值选择百分比&#xff0c;选择确定 4.这里显示出了描述性统计的结果 5.下面就是图形&#xff0c;但SPSS画的图形都不是很好啊看&#xff0c;建议用其他软件画图&#xff…

【Gitlab】虚拟机硬盘文件丢失,通过xx-flat.vmdk恢复方法

前言 由于近期过年回家&#xff0c;为了用电安全直接手动关闭了所有的电源&#xff0c;导致年后回来商上电开机后exsi上的虚拟机出现了问题。显示我的gitlab虚拟机异常。 恢复 开机之后虚拟机异常&#xff0c;通过磁盘浏览发现gitlab服务器下面的虚拟机磁盘文件只有一个xxx-f…

Python aiortc API

本研究的主要目的是基于Python aiortc api实现抓取本地设备媒体流&#xff08;摄像机、麦克风&#xff09;并与Web端实现P2P通话。本文章仅仅描述实现思路&#xff0c;索要源码请私信我。 1 demo-server解耦 1.1 原始代码解析 1.1.1 http服务器端 import argparse import …

【玩转全栈】--创建一个自己的vue项目

目录 vue介绍 创建vue项目 vue页面介绍 element-plus组件库 启动项目 vue介绍 Vue.js 是一款轻量级、易于上手的前端 JavaScript 框架&#xff0c;旨在简化用户界面的开发。它采用了响应式数据绑定和组件化的设计理念&#xff0c;使得开发者可以通过声明式的方式轻松管理数据和…