学习-java多线程面试题

为什么不建议用Executors启动线程池


*队列LinkedBlockingQueue是没有边界的队列,请求多会造成OOM
*建议使用ThreadPoolExecutors

线程池中提交一个任务的流程?

1先判断线程池是否有线程,如果与就直接执行,没有就放队列
2如果队列满了,就拒绝(代码要做处理)

 

线程池有的状态

1. Running(运行状态):线程池已经创建并且正在运行,可以接受新的任务并处理已提交的任务。 
 2. Shutdown(关闭状态):线程池不再接受新的任务,但会继续处理已提交的任务,直到所有任务完成。在关闭状态下,线程池不会创建新的线程。 
 3. Stop(停止状态):线程池不再接受新的任务,并且会中断正在执行的任务。它会尝试终止所有的工作线程。 
 4. Tidying(整理状态):所有的任务都已经终止,工作线程数量已经降为零。线程池会进行一些清理工作,例如关闭底层线程池等。 
 5. Terminated(终止状态):线程池已经完全终止,不再接受任务,也不会处理已提交的任务。  

优雅的停止线程

*stop(),释放synchronized,不会释放RreetranLock
*建议用字段(再线程做判断)
*用全局变量控制

tomcat是如何定义线程的

*tomcat中线程池走构造就会启动所有核心线程池
*tomcat的思想优先启动线程,线程达到上线才加入队列

线程池怎么设置核心线程数和最大线程数

*先看是CPU密集型 还是IO密集型,或者是混合型
*CUP密集可以+1
*IO密集可以X2
*核心业务可以多,非核心可以少,
*最终还是要压测得到合适的


 

volatile修饰的变量可以多线程可见

并发中的原则性要加锁实现

产生死锁的原因


1资源只能被一个线程使用
2线程阻塞 不释放被占用资源
3若干线程头尾相连的循环等待资源关系
建议:加锁顺序 。 设置超时时间,死锁检查

sychronize和ReetrantLock的区别

Java 中主要有以下几种锁: 


 *互斥锁(synchronized)**:互斥锁是 Java 中最常用的锁,它可以保证同一时间只有一个线程可以访问某个资源。 
*读写锁(ReentrantReadWriteLock)**:读写锁可以同时允许多个线程读取一个资源,但只有一个线程可以写入该资源。 
*公平锁(FairLock)**:公平锁保证等待时间最长的线程可以最先获得锁。 
*非公平锁(NonfairLock)**:非公平锁不保证等待时间最长的线程可以最先获得锁。 
*自旋锁(SpinLock)**:自旋锁是不需要操作系统参与的锁,它可以提高锁的性能。   耗cpu  建议在时间短的用 
*乐观锁(OptimisticLock)**:乐观锁假设在大多数情况下,多个线程不会同时访问同一个资源,因此它不会对资源进行加锁。 
如果需要保证同一时间只有一个线程可以访问某个资源,那么可以使用互斥锁。如果需要同时允许多个线程读取一个资源,但只有一个线程可以写入该资源,那么可以使用读写锁。如果需要保证等待时间最长的线程可以最先获得锁,那么可以使用公平锁。如果不需要保证等待时间最长的线程可以最先获得锁,那么可以使用非公平锁。如果需要提高锁的性能,那么可以使用自旋锁。如果需要在读操作时不加锁,那么可以使用乐观锁
 


 

from


https://www.yuque.com/tulingzhouyu/sfx8p0/dr3wi1f7uxi961uo?singleDoc#  密码:bghr

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

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

相关文章

kubeadm 安装k8s1.28.x 底层走containerd 容器

1. k8s1.28.x 的概述 1.1 k8s 1.28.x 更新 Kubernetes v1.28 是 2023 年的第二个大版本更新,包含了 46 项主要的更新。 而今年发布的第一个版本 v1.27 有近 60 项,所以可以看出来,在发布节奏调整后, 每个 Kubernetes 版本中都会包…

使用 .NET Upgrade Assistant(升级助手)升级 .NET 老旧版本项目

使用 .NET Upgrade Assistant 升级 .NET 老旧版本项目 .NET Upgrade Assistant 概述.NET Upgrade Assistant 功能1、支持以下代码语言:2、支持的 .NET 升级路径:3、支持的项目类型: .NET Upgrade Assistant 安装1、使用 Visual Studio 扩展安…

ASP.NET+ACCES视频点播系统设计

设计思想 设计方法采用模块划分、面向对象的设计思想,主要划分为以下几个模块:视频窗口模块、界面设计模块、实现搜索/点击排行等功能模块、数据库模块、后台管理模块,本人主要完成前三个模块的设计。 开发步骤:①首先进行需求分…

四层LVS与七层Nginx负载均衡的区别

一、四层负载均衡与七层负载均衡: (1)四层负载均衡: 四层负载均衡工作在 OSI 七层模型的第四层(传输层),指的是负载均衡设备通过报文中的目标IP地址、端口和负载均衡算法,选择到达的…

【C语言】字符串函数strlen #strcpy #strcmp #strcat #strstr及其模拟实现

在C语言中&#xff0c;有一种特殊的数据类型&#xff0c;即字符串类型。C 并没有专门定义一个字符串类型&#xff0c;这对我们使用字符串造成了一定的麻烦。但是&#xff0c;C标准库<string.h> 中定义了各种字符串函数&#xff0c;这对于我们来说是一件值得庆幸的事情。…

springboot 在自定义注解中注入bean,解决注入bean为null的问题

问题&#xff1a; 在我们开发过程中总会遇到比如在某些场合中需要使用service或者mapper等读取数据库&#xff0c;或者某些自动注入bean失效的情况 解决方法&#xff1a; 1.在构造方法中通过工具类获取需要的bean 工具类代码&#xff1a; import org.springframework.beans…

深圳找工作的网站

深圳吉鹿力招聘网是一家在深圳做的比较好的招聘网站&#xff0c;提供一站式的专业人力资源服务&#xff0c;包括网络招聘、校园招聘、猎头服务、招聘外包、企业培训以及人才测评等。深圳吉鹿力招聘网在深圳的口碑相当好&#xff0c;是一个很好的选择。 深圳找工作用 吉鹿力招聘…

从零构建属于自己的GPT系列1:数据预处理(文本数据预处理、文本数据tokenizer、逐行代码解读)

&#x1f6a9;&#x1f6a9;&#x1f6a9;Hugging Face 实战系列 总目录 有任何问题欢迎在下面留言 本篇文章的代码运行界面均在PyCharm中进行 本篇文章配套的代码资源已经上传 从零构建属于自己的GPT系列1&#xff1a;文本数据预处理 从零构建属于自己的GPT系列2&#xff1a;语…

VUE:ESLint如何自动修复代码

在vue开发过程中第一步总会遇到一个问题&#xff0c;就是 代码本身没有问题&#xff0c;但是因为这是一个ESLint的错误提示&#xff0c;但是它指出了在文件E:\vscode\vuesua\src\views\HomeView.vue中的第18到33行存在缩进错误。具体来说&#xff0c;第18到25行的缩进应该是2个…

HarmonyOS4.0系列——03、声明式UI、链式编程、事件方法、以及自定义组件简单案例

HarmonyOS4.0系列——03、声明式UI、链式编程、事件方法、以及自定义组件简单案例 声明式 UI ArkTS以声明方式组合和扩展组件来描述应用程序的UI&#xff0c;同时还提供了基本的属性、事件和子组件配置方法&#xff0c;帮助开发者实现应用交互逻辑。 如果组件的接口定义没有包…

iOS代码混淆工具

目录 引言 混淆效果 字符串加密 代码插入 其他混淆选项说明 总结 参考资料 &#x1f512; 这是一篇介绍iOS代码混淆工具的技术博客&#xff0c;旨在帮助开发者提高代码安全性。本工具来自于Github的混淆词库和代码&#xff0c;通过差异化处理和代码合并生成数亿种用于混淆…

什么是SpringMvc、SpringMvc23道常提到问题

1、什么是 SpringMvc&#xff1f; 答&#xff1a;SpringMvc 是 spring 的一个模块&#xff0c;基于 MVC(模型、视图、控制器) 的一个框架&#xff0c;无需中间整合层来整合。 扩展&#xff1a; 在Spring MVC中&#xff0c;各个组件的职责如下&#xff1a; 1.Model&#xff08;模…

振弦读数模块开发时的要点

振弦读数模块开发时的要点 振弦读数模块是振弦采集仪中重要的组成部分&#xff0c;以下是开发时需要注意的要点&#xff1a; 1. 确定采样频率和精度&#xff1a;振弦采集仪必须以足够高的频率和精度采集振弦信号&#xff0c;以确保数据的准确性和完整性。 2. 选择合适的传感器…

「Verilog学习笔记」占空比50%的奇数分频

专栏前言 本专栏的内容主要是记录本人学习Verilog过程中的一些知识点&#xff0c;刷题网站用的是牛客网 根据题意7分频&#xff0c;实际上是第一次电平变化经历了4个上升沿3个下降沿&#xff0c;第二次电平变化是4个下降沿3个上升沿&#xff0c;所以用两个计数器就行了。分别对…

【Python动漫系列】喜羊羊(完整代码)

文章目录 喜羊羊环境需求完整代码程序分析系列文章喜羊羊 喜羊羊是中国大陆一部儿童动画片《喜羊羊与灰太狼》中的主角之一。这部动画片自2005年开始播出,成为许多中国儿童最喜欢的动画之一。 喜羊羊是一只体型较小、毛色洁白的绵羊,性格机灵活泼,聪明机智。他是一只勇敢而…

树_二叉树所有路劲

//给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 // // 叶子节点 是指没有子节点的节点。 // // 示例 1&#xff1a; // // //输入&#xff1a;root [1,2,3,null,5] //输出&#xff1a;["1->2->5&quo…

Cmkae外部依赖管理

文章目录 一、cmake依赖管理介绍二、源码依管理1. FetchContent与find_package进行集成 2. CPM3. git submodule附加&#xff1a; address_sanitizer 和 undefined sanitizer 一、cmake依赖管理介绍 CMake 是跨平台的构建系统&#xff0c;支持 C/C、Objective-C、Fortran 等多种…

mysql中除了InnoDB以外的其它存储引擎

参考资料&#xff1a;https://dev.mysql.com/doc/refman/8.0/en/storage-engines.html MyISAM存储引擎 https://dev.mysql.com/doc/refman/8.0/en/myisam-storage-engine.html MyISAM 存储引擎是基于比较老的ISAM存储引擎&#xff08;ISAM已经不再可用&#xff09;&#xff…

CSS模块化的理解

说起css模块化&#xff0c;那么先来看看它的发展吧&#xff01; 发展历程 从Web技术来讲 Web 1.0&#xff1a;Web 起源于上世纪 90 年代&#xff0c;当时主要是静态页面&#xff0c;内容呈现形式单一&#xff0c;浏览器技术也比较简单。Web 1.0 的网站主要提供信息传递和查找…

Java Web 学习之路(2) —— 概念、SpringBoot + MyBatis(controller+service+mapper)开发流程与过程梳理

文章目录 前言1. 常见的一些概念1.1 POJO&#xff08;Plain Ordinary Java Object 简单Java对象&#xff09;1.2 DAO和Mapper 2. Java的三层架构2.1 包的层级结构2.2 交互层 controller&#xff08;用户界面、网页&#xff09;jsp文件2.3 业务处理层 service2.4 Mapper层 3. 注…
最新文章