多线程面试常问

news2024/11/16 13:37:02

一、创建线程的几种方式

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

public class MyThread extends Thread {
	@Override
	public 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> {
	@Override
	public 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.ThreadPoolExecutor
		
		System.out.println(service.getClass());

		ThreadPoolExecutor service1 = (ThreadPoolExecutor) service;
		
		//自定义线程池的属性
		
		//        service1.setCorePoolSize(15);
		//        service1.setKeepAliveTime();
		//2. 执行指定的线程的操作。需要提供实现Runnable接口或Callable接口实现类的对象
		service.execute(new NumberThread());//适用于Runnable
		service.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.coloradmin.cn/o/2076341.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

deepin(深度)社区亮相2024 RISC-V中国峰会,全力推动RISC-V生态发展

8月21日—23日&#xff0c;全球三大RISC-V专业展会之一、国内最大的RISC-V年度盛会——2024 RISC-V中国峰会于浙江杭州盛大召开&#xff01;deepin&#xff08;深度&#xff09;社区携手合作伙伴出席峰会&#xff0c;与国内外业界专家、企业代表、研究机构及社区伙伴&#xff0…

python如何通过Json路径返回Json响应对应的值例子解析

在Python中&#xff0c;处理JSON数据通常使用标准库中的json模块来解析和操作JSON格式的数据。如果你想要通过JSON路径来获取JSON响应中的值&#xff0c;你可以使用第三方库&#xff0c;如jsonpath-ng&#xff0c;它允许你使用类似XPath的语法来查询JSON对象。 首先&#xff0…

mysql读写分离(mysql路由)

mysql路由 1. server4路由主机操作 rpm -ivh mysql-router-community-8.0.21-1.el7.x86_64.rpm # 安装路由工具 cd /etc/mysqlrouter/ vim mysqlrouter.conf # 配置文件# 均摊 [routing:ro] bind_address 0.0.0.0 bind_port 7001 destinations 192.168.228.11:3306,192.168…

LLM自对齐技术最新研究分享(一):对齐 Pipeline 数据合成(上)

欢迎关注 OpenMMLab 公众号获取一手技术干货 当我们向 ChatGPT 提问时&#xff0c;我们希望他能准确地回答我们的问题。当我们向他提出不合理的要求&#xff0c;比如询问如何制作炸弹或者如何考试作弊&#xff0c;我们希望他能拒绝回答并及时纠正我们的错误。AI 对齐&#xff0…

GAMES104:09高级动画技术:动画树、IK和表情动画-学习笔记

文章目录 一&#xff0c;动画混合1.1 数学混合&#xff1a;线性插值1.2 混合空间Blend Space1.2.1 1D Blend Space1.2.2 2D Blend Space1.2.3 Skeleton Masked Blending骨骼遮罩混合1.2.4 Addictive Blending 二&#xff0c;动画状态机Animation State Machine&#xff08;ASM&…

JMeter之插件jp@gc - Stepping Thread Group

文章目录 业务场景核心功能安装教程常规使用 业务场景 在性能测试中&#xff0c;希望jemter能动态设置线程数&#xff0c;并且线程数量能从低到高依次压测接口&#xff0c;比如线程数量从10增加到50&#xff0c;通过设定一定的并发线程数&#xff0c;给定加压规则&#xff0c;遵…

并发服务器

服务器&#xff0c;后台服务软件&#xff0c;后端开发&#xff0c;为软件客户端提供支持&#xff0c;数据支持&#xff0c;存储支持&#xff0c;数据中转 高并发要求&#xff0c;随着用户数量的增长&#xff0c;服务器的设计结构扩展&#xff0c;为更多用户提供服务器。 Web服…

深入了解:浅拷贝深拷贝

浅拷贝和深拷贝 在java中 理解深拷贝和浅拷贝的概念对于处理对象复制时 保持数据的一致性和独立性至关重要 这两种拷贝方式主要区别在于它们如何处理对象内部的引用类型成员变量 在学习浅拷贝和深拷贝前 我们要区分 对象引用 和 对象本身的区别 对象引用&#xff1a;在Java中…

线上考试系统---虚拟化技术部署

部署前端服务器 1.将资源上传到服务器 scp -r dist/ root192.168.1.50:~2.在服务器上创建基础容器 [rootdocker0 ~]# docker run -it --name c0 centos:latest /bin/bash [rootc1092b8c9ce5 /]# [rootdocker0 ~]# [rootdocker0 ~]# docker attach c0 3.在容器中修改yum源 …

Using Managed Identity to Access Azure OpenAI Service

题意&#xff1a;使用托管身份访问 Azure OpenAI 服务 问题背景&#xff1a; Im working with Azure OpenAI service, and want to test its Managed Identity support. According to the docs it supports Managed Identity authentication, for example - using a VM. 我正…

鸿蒙界面开发(四):支付宝首页开发实战

利用了层叠布局和一个scroll滚动组件。 包括底部导航、顶部导航、主体的滚动窗口。 主体的滚动窗口又包括一个快捷导航栏和一个导航窗口、以及主体部分 import text from ohos.graphics.text;Entry Component struct Index {State message: string Hello World;//支付宝首页b…

全网最最最详细的企业级WEB应用服务器TOMCAT

目录 一:tomcat的介绍 Tomcat请求过程 实验部分&#xff1a; 1&#xff1a;安装 Tomcat 1.1&#xff1a;安装java环境 1.2&#xff1a;安装并启动tomcat 1.3&#xff1a; 查看端口 1.4&#xff1a;浏览器访问以下试试 2&#xff1a;tomcat的文件结构和组成 3&…

高性能web服务器4——Nginx反向代理A

Nginx 反向代理 Nginx 的反向代理功能是其最强大的特性之一&#xff0c;它允许 Nginx 作为中间层来接收客户端的请求&#xff0c;并将这些请求转发到后端服务器。这种架构不仅可以提高安全性&#xff0c;还可以实现负载均衡、缓存和内容过滤等功能。本文将详细介绍 Nginx 反向…

【neo4j】neo4j-Desktop安装

Neo4j是一个高性能的图数据库&#xff0c;它使用图形结构来存储和处理数据。它是一个开源的、完全事务的数据库&#xff0c;专门设计用于大规模的图形数据。Neo4j使用一种名为Cypher的查询语言来处理图形数据&#xff0c;使用户能够方便地进行复杂的图形查询和分析。 Neo4j的主…

AIGC 大模型:实践与未来

一、AIGC 大模型的概念与发展 &#xff08;一&#xff09;AIGC 大模型的定义与特点 AIGC&#xff08;AI Generated Content&#xff09;大模型是一种基于大规模数据训练的人工智能模型&#xff0c;具备强大的内容生成能力和多模态交互能力。它能够理解和处理多种类型的信息&a…

找不到工作四处闲逛github,我发现了一个找工作的神器

前言 到底是谁把我那不值钱的班给上了&#xff0c;博主找不到工作&#xff0c;天天游荡。 终于在github上发现一个找工作的神器&#xff0c;那就是&#xff1a;get_gobs 该项目支持定时投递&#xff0c;自动编写打招呼语&#xff0c;妈妈&#xff0c;再也不用担心我打招呼的…

简易STL实现 | List的实现

基于双向链表的数据结构 1、list的特性 双向链表&#xff1a;允许在序列的两端和中间 执行高效的插入和删除操作 不支持随机访问&#xff1a;要访问list中的元素&#xff0c;必须通过迭代器进行 动态内存管理&#xff1a; list的内部实现使用节点&#xff0c;每个节点都包含…

Java 入门指南:Java IO 模型

UNIX I/O 模型 根据冯.诺依曼结构&#xff0c;计算机结构分为 5 大部分&#xff1a;运算器、控制器、存储器、输入设备、输出设备。 输入设备&#xff08;比如键盘&#xff09;和输出设备&#xff08;比如显示器&#xff09;都属于外部设备。网卡、硬盘这种既可以属于输入设备…

日期反向格式化之前导零

1.问题描述 2.问题分析 为什么用yyyy年MM月dd日会报错&#xff0c;原因是&#xff1a;"前导零" 2.1前导零 前导零指的是在单个数字前面添加一个零以确保数字位数相同的过程。在日期格式化中&#xff0c;前导零常用于确保月份或日期总是显示为两位数字。 例…

mac苹果电脑配置Docker最新国内源

如图&#xff1a; 具体配置如下: {"builder": {"gc": {"defaultKeepStorage": "20GB","enabled": true}},"experimental": false,"registry-mirrors": ["https://docker.anyhub.us.kg", &…