java八股之并发编程
1.java线程和操作系统线程之间的区别?
现在java线程本质上是操作系统线程,java中采用的是一对一的线程模型(一个用户线程对应一个内核进程)
2.什么是进程和线程?
1.进程是操作系统一次执行,资源分配和调度的基本单位,有独立的内存和资源,创建和销毁的开销大,进程之间相互独立
2.线程是进程内部的执行单位,是CPU调度的基本单位,可以共享进程的资源。
3.同一个进程内的线程共享堆和方法区的资源
4.每个线程都有自己的程序计数器,虚拟机栈和本地方法栈
3.程序计数器为什么是私有的?
1.程序计数器依次读取指令,实现代码的控制,用于记录当前线程执行的位置,线程切换后他才能恢复到正确的执行位置
4.虚拟机栈和本地方法栈为什么是私有的?
1.虚拟机栈:在java方法执行之前会创建一个栈帧用于存储局部变量表,操作数栈等。从方法调用到执行完成的过程,对应栈帧中入栈和出栈的过程
2.本地方法帧,功能和虚拟机栈相似,但是用到了Native方法
总结:保证线程局部变量不被别的线程访问到。
5.为什么存在JVM?
1.java程序被编译成了字节码.class文件,JVM可以在不同的操作系统或平台上运行这些字节码,不同的平台有不同的JVM实现,它屏蔽了底层操作系统和硬件的差异,使得java程序实现了“一次编写,到处运行”的特性
6.介绍下堆和方法区之间的区别?
1.堆主要用于存储对象实例和数组,是所有线程共享的。方法区存储类中的常量,静态变量等
2.堆内存的分配是动态的,当创建新的对象时候,堆就会为其分配内存空间。方法区的内存分配在类的加载时进行,当类被加载到JVM时,常量池信息就会加载到方法区
7.创建线程的方式
1.继承Thread类,实现Runnable接口和实现Callable接口
8.说说线程的生命周期和状态?
1.NEW:初始状态,线程被创建但是没有调用start()方法
2.RUNNABLE:运行状态,线程调用了start()方法
3.BLOCKED:阻塞状态,等待锁释放
4.WATING:等待状态,等待其他线程执行后
5.TIME_WATING:超时等待状态,可以在指定时间后自行返回
6.TERMINATED:终止状态,线程已运行完毕
9.什么是线程的上下文切换
1.线程在执行的过程中会有自己的运行条件和状态(上下文)。当发生线程切换的时候,如主动让出CPU,时间片用完,IO操作,这个时候需要保存上下文信息,方便下次回复现场,这就是所谓的上下文切换。
10.sleep方法和wait方法的对比
1.共同点:都可以暂停线程的执行
2.区别:sleep没有释放锁,wait释放锁。
wait一般用于线程之间的交互,sleep通常用于暂停线程的执行。wait方法需要调用notify苏醒,或者设置超时时间,sleep一般执行完成,自动苏醒
11.为什么wait方法不定义在Thread中?
wait是让获得对象锁的线程实现等待,会自动释放当前线程占有的对象锁,每个对象都有对象锁,因此操作的是对象Object而不是Thread。
sleep方式只是让当前线程暂停执行,不涉及到对象,所以在Thread中
12.可以直接调用Thread类的run方法吗?
new Thread线程进入新建状态,调用start方法进行就绪状态,等分配到时间片开始运行,自动执行run方法的内容。如果直接执行run方法,会把run方法当作main线程下的普通方法执行,并不会在线程执行
13.为什么要使用多线程?
线程是程序执行的最小单位,线程间切换的开销远小于进程。并且现在电脑都是多CPU,可以多个线程同时运行。多线程是高并发的基础,可以提升系统的并发能力
14.单核CPU支持JAVA多线程吗?
支持,单核CPU通过时间片轮转的方式分配给不同的线程使用,一个CPU一次只能执行一个任务,但可以在多个线程之间快速切换,感觉上是一起工作
15.单核CPU上运行多个线程效率一定高吗?
如果是CPU密集型,频繁的线程切换开销会导致效率降低
IO密集型,CPU可以充分利用IO等待时间,可以提高效率
16.产生死锁的必要条件
1.互斥条件:该资源任意一个时刻只能由一个线程占用
2.请求与保持条件:线程请求资源阻塞时,对持有的资源不释放
3.不剥夺条件:对于获得的资源没使用完不能被其他线程强行剥夺,只有使用完才释放资源
4.循环等待:循环等待对方手里的资源
17.如何避免死锁:
1.破坏请求和保持:一次性申请所有资源
2.破坏不剥夺:主动释放资源
3.破坏循环等待:按序分配资源
18.Synchronized和Lock区别
1,Synchronized是内置的java关键字,Lock是一个Java类
2.synchronized无法判断获取锁的状态,Lock可以判断是否获取到了锁
3.Synchronized会自动释放锁,Lock必须要手动释放锁!否则死锁
4.synchronized线程1获得锁,线程2 只能傻傻的等待
19.什么叫做可重入锁
1.指的是同一个线程再持有锁的情况下,多次获取该锁不会被阻塞
2.可重入锁内部维护了一个计数器,当线程第一次获取锁时,计数器会被设置为1,如果该线程再次请求同一把锁,计数器会递增。当线程释放锁时,只有计数器的值变为0,锁才会被完全释放,此刻其他线程才有机会获得该锁。
20.如何理解生产者和消费者问题synchronized
1 判断等待—业务—通知三个流程
2.资源类和线程分开
3.多生产多消费情况下,判断要通过while循环判断,防止虚假唤醒问题,if只会执行一次
21.JUC版生产者和消费者
lock替代synchronized
condition.await替换wait,condition.signalAll()替换notify
可以精准通知线程唤醒,设置对应的同步监视器
22.8锁问题
1,synchronized锁的对象是方法的调用者,谁先调用谁就先拿到锁
2.普通方法优先于同步方法先执行
3.带了static的方法,锁的是class对象,一个类只有全局唯一的class对象
23.List线程不安全的解决方案
- 使用vector实现类
2.使用Collections.synchronized(new ArrrayList<>())
3.new CopyOnWriteArrayList<>();
4.如果不适用上述方法,可能出现CocurrentModifiationArrrayList
5.CopyOnWriteArrayList使用lock锁,vector内部采用的是synchronized锁
24.hashset的底层是什么?
底层就是用的hashmap的key的唯一性,使得set不重复
25.多线程的第三种创建方式:实现Callable接口
psvm {MyThread thread = new MyThread();FutureTask futureTask = new FutureTask(thread);new Thread(futureTask "A").start();Integer o = (Integer)futureTask.get(); // 获取返回值sout(o);
}class MyThread implements Callable<Integer> {@overridepublic Integer call(){return 1024;}
}
把线程丢到FutureTask中,futertask丢到启动类中
26.CounterDownLatch
counterDownLatch.countDown(); //数量-1
countDownLatch.await(); // 等待计数器归零,然后再向下执行
27.CylicBarrier
CylicBarrier cylicBarrier = (new CylicBarrier(7, ()->{sout(“成功”)})
cylicBarrier.await() 计数器加一,等待线程执行结束,输出成功
类似于一个加法计数器
28.Semaphore信号量
Semaphore semaphore = new Sephore(3);
semaphore.acquire(); // 获取信号量,如果已满,等待被释放,信号量-1
semaphore.release(); // 释放信号量,信号量+1
多个共享资源的互斥使用
29.ReadWriteLock
1.写入保证原子性,必须保证有序。读线程可以随机读取,多个线程可以同时占有
独占锁(写锁):一次只能被一个线程占有
共享锁(读锁):多个线程同时占有
30.线程池
程序运行的本质:占用系统资源!为了优化资源的使用,引入了线程池
池化技术:事先准备好一些资源,有人要用,就来我这里拿,用完之后还给我
线程池的好处:降低资源的消耗,提高响应的速度,方便管理
相关文章:
java八股之并发编程
1.java线程和操作系统线程之间的区别? 现在java线程本质上是操作系统线程,java中采用的是一对一的线程模型(一个用户线程对应一个内核进程) 2.什么是进程和线程? 1.进程是操作系统一次执行,资源分配和调度的…...
C#/.NET/.NET Core拾遗补漏合集(25年4月更新)
前言 在这个快速发展的技术世界中,时常会有一些重要的知识点、信息或细节被忽略或遗漏。《C#/.NET/.NET Core拾遗补漏》专栏我们将探讨一些可能被忽略或遗漏的重要知识点、信息或细节,以帮助大家更全面地了解这些技术栈的特性和发展方向。 ✍C#/.NET/.N…...
层次式架构核心:中间层的功能、优势与技术选型全解析
层次式架构中的中间层是整个架构的核心枢纽,承担着多种重要职责,在功能实现、优势体现以及技术选型等方面都有丰富的内容,以下为你详细介绍: 一、功能 1.业务逻辑处理 复杂规则运算:在许多企业级应用中,…...
PDF.js 生态中如何处理“添加注释\添加批注”以及 annotations.contents 属性
我们来详细解释一下在 PDF.js 生态中如何处理“添加注释”以及 annotations.contents 属性。 核心要点:PDF.js 本身主要是阅读器,不是编辑器 首先,最重要的一点是:PDF.js 的核心库 (pdfjs-dist) 主要设计用于解析和渲染…...
MySQL性能调优(三):MySQL中的系统库(简介、performance_schema)
文章目录 MySQL性能调优数据库设计优化查询优化配置参数调整硬件优化 1.MySQL中的系统库1.1.系统库简介1.2.performance_schema1.2.1.什么是performance_schema1.2.2.performance_schema使用1.2.3.检查当前数据库版本是否支持1.2.4.performance_schema表的分类1.2.5.performanc…...
【Python语言基础】22、异常处理
文章目录 1. 异常1.1 简介1.2 为什么需要异常处理 2. 基本语法2.1 各部分详解 3. 异常处理流程3.1 执行try代码块3.2 异常发生检查3.3 异常捕获与匹配3.4 执行匹配的 except 代码块3.5 执行 else 代码块(可选)3.6 执行 finally 代码块(可选&a…...
印度zj游戏出海代投本土网盟广告核心优势
印度游戏出海代投本土网盟广告的核心优势包括: 本土化广告策略:针对印度市场的特点,定制本土化的广告策略,吸引更多印度用户的关注和参与。 深度了解印度市场:对印度文化、消费习惯、网络使用习惯等有深入了解&#x…...
NO.97十六届蓝桥杯备战|数论板块-最大公约数和最小公倍数|欧几里得算法|秦九韶算法|小红的gcd(C++)
约数和倍数 如果a 除以b 没有余数,那么a 就是b 的倍数,b 就是a 的约数,记作b ∣ a 。 约数,也称因数。 最⼤公约数和最⼩公倍数 最⼤公约数Greatest Common Divisor,常缩写为gcd。 ⼀组整数的公约数,是…...
《软件设计师》复习笔记(11.6)——系统转换、系统维护、系统评价
目录 一、遗留系统(Legacy System) 定义: 特点: 演化策略(基于价值与技术评估): 高水平 - 低价值: 高水平 - 高价值: 低水平 - 低价值: 低水平 - 高价…...
ROS机器人一般用哪些传感器?
以下是ROS机器人常用传感器的分层详解及思维导图总结,涵盖传感器分类、核心参数、ROS支持及典型应用: 一、环境感知传感器 1. 视觉传感器 类型 原理 ROS支持 数据类型 典型型号/驱动 优缺点及应用场景 单目摄像头 单镜头成像,通过透视变换获取2D图像,依赖算法推断深度 驱…...
嵌入式linux架构理解(宏观理解)6ull学习心得---从架构理解到自写程序运行及自写程序开机自启动
一、linux系统的三个组成部分 U-Boot、Linux kernel 和 rootfs 这三者一起构成了一个完整的 Linux 系 统,一个可以正常使用、功能完善的 Linux 系统。 1.在移植 Linux之前我们需要先移植一个 bootloader 代码,这个 bootloader 代码用于启动 Linux 内核,bootloader有很多,常…...
人像面部关键点检测
此工作为本人近期做人脸情绪识别,CBAM模块前是否能加人脸关键点检测而做的尝试。由于创新点不是在于检测点的标注,而是CBAM的改进,因此,只是借用了现成库Dilb与cv2进行。 首先,下载人脸关键点预测模型:Index of /file…...
面试算法高频08-动态规划-02
动态规划练习题 题目描述 给定两个字符串 text1 和 text2,要求返回这两个字符串的最长公共子序列。例如对于字符串 “ABAZDC” 和 “BACBAD”,需找出它们最长的公共子序列。子序列是指在不改变其余字符相对位置的情况下,从原始字符串中删除…...
PyTorch逻辑回归总结
目录 PyTorch逻辑回归总结神经网络基础基本结构学习路径 线性回归简单线性回归多元线性回归 逻辑回归核心原理损失函数 梯度下降法基本思想关键公式学习率影响 PyTorch实现数据准备模型构建代码优化 核心概念对比 PyTorch逻辑回归总结 神经网络基础 基本结构 输入节点隐藏节…...
使用 Vue 开发登录页面的完整指南
一、项目搭建与基础配置 环境准备 使用 Vue CLI 或 Vite 创建项目,推荐组合:Vue3 Element Plus Vue Router npm create vuelatest npm install element-plus element-plus/icons-vue vue-router 全局配置(main.js) import { c…...
EDID结构
EDID DDC通讯中传输显示设备数据 VGA , DVI 的EDID由128字节组成,hdmi的EDID增加扩展块128字节。扩展快的内容主要是和音频属性相关的,DVI和vga没有音频,hdmi自带音频,扩展快数据规范按照cea-861x标准。 Edid为了让pc或其他的图像…...
文件包含(详解)
文件包含漏洞是一种常见的Web安全漏洞,其核心在于应用程序未对用户控制的文件路径或文件名进行严格过滤,导致攻击者能够包含并执行任意文件(包括本地或远程恶意文件)。 1. 文件包含原理 动态文件包含机制 开发者使用动态包含函数…...
《SpringBoot中@Scheduled和Quartz的区别是什么?分布式定时任务框架选型实战》
🌟 大家好,我是摘星! 🌟 今天为大家带来的是Scheduled和Quartz对比分析: 新手常见困惑: 刚学SpringBoot时,我发现用Scheduled写定时任务特别简单。但当我看到同事在项目里用Quartz时&…...
安装fvm可以让电脑同时管理多个版本的flutter、flutter常用命令、vscode连接模拟器
打开 PowerShellfvm安装 dart pub global activate fvm安装完成后,如果显示FVM无法识别,那么需要去添加环境变量path添加这个:C:\Users\Administrator\AppData\Local\Pub\Cache\bin 常用命令 fvm releases 查看用户可以装的flutter版本fvm l…...
UNION和UNION ALL的主要区别
UNION和UNION ALL的主要区别在于处理重复数据和排序的方式。 UNION和UNION ALL都是SQL语言中用于合并两个或多个SELECT语句结果集的关键字。它们的主要区别如下: 1、对重复结果的处理:UNION在进行表链接后会筛选掉重复的记录,而UNION ALL不会…...
Kafka系列之:计算kafka集群topic占的存储大小
Kafka系列之:计算kafka集群topic占的存储大小 topic存储数据格式统计topic存储大小定时统计topic存储大小topic存储数据格式 单位是字节大小 size_bytes{directory="/data/datum/kafka/optics-all" } 782336计算topic存储大小脚本逻辑是: 计算指定目录或文件的大小…...
[密码学实战]Java使用Bouncy Castle实现Base64编码解码:完整指南
Java使用Bouncy Castle实现Base64编码解码:完整指南 摘要 本文将深入讲解如何通过Bouncy Castle(BC)加密库实现Base64编码解码,包含核心API使用、流式处理、与加密算法集成三大实战场景,提供5种代码实现方案和3种性能优化技巧。 一、Base64基础原理 1.1 编码机制 Bas…...
智谱AI大模型免费开放:开启AI创作新时代
文章摘要:近日,国内领先的人工智能公司智谱AI宣布旗下多款大模型服务免费开放,这一举措标志着大模型技术正式迈入普惠阶段。本文将详细介绍智谱AI此次开放的GLM-4 等大模型,涵盖其主要功能、技术特点、使用步骤以及应用场景&#…...
为什么要给单片机植入操作系统
给单片机植入操作系统(通常是实时操作系统,RTOS)主要是为了在资源有限的环境中实现更高效、更可靠的多任务管理和系统调度。以下是主要原因和优势: 1. 多任务并行处理 背景:单片机通常需要同时处理多个任务࿰…...
T1结构像+RS-fMRI影像处理过程记录(数据下载+Matlab工具箱+数据处理)
最近需要仿真研究T1结构像RS-fMRI影像融合处理输出目标坐标的路线可行性。就此机会记录下来。 为了完成验证目标处理,首先需要有数据,然后需要准备对应的处理平台和工具箱,进行一系列。那么开始记录~ 前言: 为了基于种子点的功能连…...
【前端基础】--- HTML
个人主页 : 9ilk 专栏 : 前端基础 文章目录 🏠 初识HTML🏠 HTML结构认识HTML标签HTML文件基本结构标签层次结构快速生成代码框架 🏠 HTML常见标签注释标签标题标签 h1-h6段落标签 p换行标签 br格式化标签图片标签 img超链接标签…...
黑马V11版 最新Java高级软件工程师课程-JavaEE精英进阶课
课程大小:60.2G 课程下载:https://download.csdn.net/download/m0_66047725/90615581 更多资源下载:关注我 阶段一 中台战略与组件化开发专题课程 阶段二 【物流行业】品达物流TMS 阶段三 智牛股 阶段四 千亿级电商秒杀解决方案专题 …...
C#插件与可扩展性
外接程序为主机应用程序提供了扩展功能或服务。.net framework提供了一个编程模型,开发人员可以使用该模型来开发加载项并在其主机应用程序中激活它们。该模型通过在主机和外接程序之间构建通信管道来实现此目的。该模型是使用: System.AddIn, System.AddIn.Hosting, System.…...
CVPR‘25 | 高文字渲染精度的商品图文海报生成
本文分享阿里妈妈智能创作与AI应用团队在图文广告创意方向上提出的商品图文海报生成模型,通过构建字符级视觉表征作为控制信号,可以实现精准的图上中文逐像素生成。基于该项工作总结的论文已被 CVPR 2025录用,并在阿里妈妈业务场景落地&#…...
Golang|抽奖相关
文章目录 抽奖核心算法生成抽奖大转盘抽奖接口实现 抽奖核心算法 我们可以根据 单商品库存量/总商品库存量 得到每个商品被抽中的概率,可以想象这样一条 0-1 的数轴,数轴上的每一段相当于一种商品,概率之和为1。 抽奖时,我们会生…...
