多线程面试常问

一、创建线程的几种方式

1、继承Thread类并重写run()方法。

public class MyThread extends Thread {@Overridepublic void run() {System.out.println("通过集成 Thread 类实现线程");
}
}
// 如何使用
new MyThread().start()

2、实现Runnable接口并重写run()方法。将Runnable实例作为Thread类的构造函数参数传递并启动线程。

public class MyRunnable implements Runnable {
@Override
public void run() {System.out.println("通过实现 Runnable 方式实现线程");
}
}
// 使用
// 1、创建MyRunnable实例
MyRunnable runnable = new MyRunnable();
//2.创建Thread对象
//3.将MyRunnable放入Thread实例中
Thread thread = new Thread(runnable);
//4.通过线程对象操作线程(运行、停止)
thread.start();


3、实现Callable接口并重写call()方法。使用ExecutorService的submit()方法提交Callable任务,并通过Future对象获取返回值。

public class MyCallable implements Callable<Integer> {@Overridepublic Integer call() throws Exception {return new Random().nextInt();}
// 使用方法
// 1、创建线程池
ExecutorService service = Executors.newFixedThreadPool(10);
// 2、提交任务,并用 Future提交返回结果
Future<Integer> future = service.submit(new MyCallable());
}

4.使用线程池。线程池可以重复使用线程,提高性能和可靠性。Java提供了Executor框架来管理线程池。常见的线程池实现类包括ThreadPoolExecutor和ScheduledThreadPoolExecutor

public class ThreadPool {public static void main(String[] args) {//1. 提供指定线程数量的线程池ExecutorService service = Executors.newFixedThreadPool(1);//输出class java.util.concurrent.ThreadPoolExecutorSystem.out.println(service.getClass());ThreadPoolExecutor service1 = (ThreadPoolExecutor) service;//自定义线程池的属性//        service1.setCorePoolSize(15);//        service1.setKeepAliveTime();//2. 执行指定的线程的操作。需要提供实现Runnable接口或Callable接口实现类的对象service.execute(new NumberThread());//适用于Runnableservice.execute(new NumberThread1());//适用于Runnable//        service.submit(Callable callable);//适合使用于Callable//3. 关闭连接池service.shutdown();}}

 

二、线程的几种状态

 

 

二、如何保证线程执行顺序

使用join,可以等待线程执行完成

三、notify和notifyAll的区别

notify只是随机唤醒一个线程

notifyAll是唤醒所有的线程

四、java中wait和sleep方法的不同

五、锁升级过程

 六、Volatile关键字的理解

七、synchronized和Lock锁区别

 

八、ReentranLock锁

 

线程池 

1、线程池有哪些核心参数

最大线程数:=核心线程数+救急线程数

核心线程数

阻塞队列:WorkQueue,当没有空闲核心线程数时,新来的任务就会加入到此队列,队列满就会创建救急线程执行任务

救急线程得存活时间:keepAliveTime 生存时间内没有新任务就会资源释放

时间单位:unit救急线程的存活时间单位

线程工厂:threadFactory-可以定制线程对象的创建,例如设置线程名称,是否守护线程等

拒绝策略:当所有的线程都在工作,阻塞队列也满了,就会触发拒绝策略

 

2、常见的阻塞队列

 

3、如何确定核心线程数 

4、线程池的种类

5、谈谈ThreadLocal的理解 

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

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

相关文章

Linux文件系统及常见快捷键

Linux文件系统及常用快捷键 (只是对linux简单的介绍,新手常用的快捷键) 1、Linux文件系统结构 windows文件系统 Windows操作系统将硬盘进行分区&#xff0c;然后用 A 、 B 、 C 、 D 、等符号标识。存取文件时一定要清楚存放在哪个磁盘的哪个目录下。 Linux 文件系统结构 …

基于FPGA的SD NAND Flash数据读写实现

1、存储芯片分类 目前市面上的存储芯片&#xff0c;大致可以将其分为3大类&#xff1a; ① EEPROM EEPROM (Electrically Erasable Programmable read only memory)是指带电可擦可编程只读存储器&#xff0c;是一种掉电后数据不丢失的存储芯片。EEPROM 可以在电脑上或专用设备…

腾讯云授权子用户账号域名备案

官网文档没说清楚 2.在购买了服务器的账号生成授权码 2.填写子账号id 3.子账号即可弹出备案按钮了

Wemos D1 Mini pro/ nodeMcu / ESP8266 驱动 240*320 ILI9341 SPI液晶屏

Wemos D1 Mini / nodeMcu / ESP8266 驱动 240*320 ILI9341 SPI液晶屏 效果展示器件硬件连接引脚连接原理图引脚对照表 安装TFT_eSPI库TFT_eSPI库中User_Setup.h文件的参数修改User_Setup.h文件的位置User_Setup.h文件中需要修改的参数User_Setup.h完成源码 例程 缘起&#xff1…

【3天速成Python基础语法(3)】

文章目录 1 :peach:库的基本认识:peach:2 :peach:标准库:peach:3 :peach:第三方库:peach: 1 &#x1f351;库的基本认识&#x1f351; 库 就是是别人已经写好了的代码, 可以让我们直接拿来用。一个编程语言能不能流行起来, 一方面取决于语法是否简单方便容易学习, 一方面取决于…

安捷伦色谱仪器LabVIEW软件替换与禁运配件开发

可行性分析及实现路径 可行性&#xff1a; 软件替换&#xff1a; 驱动程序支持&#xff1a; 要实现LabVIEW对安捷伦色谱仪器的控制&#xff0c;需要检查安捷伦是否提供LabVIEW驱动程序。如果没有现成的驱动&#xff0c;则可能需要开发自定义的驱动程序&#xff0c;通过LabVIEW…

JavaWeb基础 -- Servlet

JavaWeb基础 – Servlet 1.Servlet简介 1.1 Servlet是什么 Servlet本身是用Java编写的&#xff0c;运行在Web服务器上的应用程序&#xff0c;并作为Web浏览器和其他HTTP客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。Servlet可以收集来自网页表单输入的数据…

InstantID: Zero-shot Identity-Preserving Generation in Seconds

https://arxiv.org/pdf/2401.07519#page9.73https://github.com/instantX-research/InstantID?tabreadme-ov-filehttps://github.com/instantX-research/InstantID/pull/89/files 问题引入 目标是生成和reference图片相符合的图片&#xff0c;特别是人脸&#xff1b;现在基于…

汽车耐老化太阳跟踪聚光户外加速老化试验

汽车耐老化太阳跟踪聚光户外加速老化试验方法是一种模拟太阳光照、热和潮湿环境条件下&#xff0c;测试汽车外饰材料耐老化性能的试验方法。此方法主要用于评估材料在遭受日光、热和潮湿影响下的相对耐老化性&#xff0c;以确定其在实际使用过程中的耐久性。 1. 范围 本标准适…

计算机类-本科毕业设计快速通关攻略-(选题-创新点-论文框架-论文绘图)

一、推荐选题 大多数人都没有什么基础&#xff0c;不推荐做系统类的&#xff0c;建议走深度学习方向&#xff0c;简单易上手&#xff0c;下面将给出几个我认为不错的方向。 1、目标检测类 目标检测是每年深度学习毕业设计的主流&#xff0c;如Faster R-CNN、YOLO、SSD等算法…

Linux网络配置和系统管理

Linux网络配置和系统管理 1.查看网络IP和网关windows系统主机 IP虚拟机 IP虚拟机网关网络检测命令 ping网络连接模式 2.配置静态IP地址(NAT网络连接模式)前提说明配置主机的VMware Network Adapter VMnet8 网卡静态IP地址注意点虚拟机配置静态ip修改后ping命令测试修改虚拟机静…

使用Rclone从Google Drive 下载大文件

前言 使用浏览器、或FDM、wget、curl等下载工具&#xff0c;从 Google Drive 下载大文件时经常会遇到中断或下载失败的情况&#xff0c;这一般是由于网络不稳定、Google Drive 的限制、或文件太大导致。 虽然使用 gdown 能一定程度避免上述问题&#xff0c;但对于非常大的文件…

在国产芯片上实现YOLOv5/v8图像AI识别-【2.5】yolov8使用C++部署在RK3588更多内容见视频

本专栏主要是提供一种国产化图像识别的解决方案&#xff0c;专栏中实现了YOLOv5/v8在国产化芯片上的使用部署&#xff0c;并可以实现网页端实时查看。根据自己的具体需求可以直接产品化部署使用。 B站配套视频&#xff1a;https://www.bilibili.com/video/BV1or421T74f 背景…

编写 prometheus exporter监控 mysql group replication

用 prometheus 监控 mysql&#xff0c;之前用 mysqld_exporter 收集mysql 的监控指标&#xff0c;发现并没有 mysql 组复制状态的指标。只能自己收集了&#xff0c;编写脚本收集指标推送到 pushgateway&#xff0c;这个办法更简单但是扩缩容不是很方便。下面用 python 编写的一…

kotlin

kotlin 多个耗时操作需拿上一个结果livedata按顺序执行 在Kotlin中&#xff0c;如果你想要按顺序执行多个耗时操作并获取上一个操作的结果&#xff0c;你可以使用LiveData和Transformations.switchMap来实现。以下是一个简化的例子&#xff1a; class MyRepository(private va…

LLM分布式预训练浅析

随着深度学习的不断进步&#xff0c;语言模型的规模越来越大&#xff0c;参数量级已经达到了数千亿甚至数万亿&#xff0c;参数规模的指数增长带来了两个巨大的挑战 1&#xff09;模型参数过大&#xff0c;如GLM 130B模型参数需要520GB&#xff08;130B*4bytes&#xff09;的显…

MDM监管锁系统租赁系统搭建教程

材料准备 使用公司资质申请苹果开发者账号 https://support.tuya.com/zh/help/_detail/Kam3pskapsytn 注意事项&#xff1a; 填写公司官网的时候 公司官网必须可以访问 且官网包含公司的 地址 联系方式 等信息 否则会被拒绝 申请苹果开发者的appleid 最好使用已经注册并使用一…

8.5 数据库基础技术-规范化

函数依赖 函数依赖公理系统

每日Attention学习15——Cross-Model Grafting Module

模块出处 [CVPR 22] [link] [code] Pyramid Grafting Network for One-Stage High Resolution Saliency Detection 模块名称 Cross-Model Grafting Module (CMGM) 模块作用 Transformer与CNN之间的特征融合 模块结构 模块思想 Transformer在全局特征上更优&#xff0c;CNN在…

Puppeteer Web 抓取:使用 Browserless 的 Docker

Docker 镜像介绍 Docker 镜像是用于在 Docker 容器中执行代码的文件。它类似于构建 Docker 容器的指令集&#xff0c;就像一个模板。换句话说&#xff0c;它们相当于虚拟机环境中的快照。 Docker 镜像包含运行容器所需的所有库、依赖项和文件&#xff0c;使其成为容器的独立可…