Java中的线程
一、创建线程的几种方式?
① 通过继承Thread类并重写run方法
,实现简单但不可以继承其他类
Thread底层也是实现了Runnable接口,重写的是run而不是start方法
②实现Runnable接口并重写run方法,
避免了单继承的局限性,实现解耦,更灵活

可以通过匿名内部类,Runnable接口是一个函数式接口,可以用Lambda表达式

③实现Callable接口【泛型类型为重写call方法的返回值类型】并重写call方法
,可以获取线程的执行结果的返回值
FutureTask底层也是继承了Runnable接口,使用Thread结合FutureTask,这种方式可以拿到异步执行任务的结果。
④【项目中常使用的方式】通过线程池创建
ExecutorService es = new Executors.newSingleThreadExecutor();
然后es.submit(配合①或者②)
但是一般都是使用自定义创建线程池。
二、Runnable接口和Callable接口的区别:
Runnable接口run方法无返回值,Callable接口call方法有返回值,支持泛型。
Runnable接口run方法不允许抛出异常,只能在内部trycatch消化;而Callable的call方法允许抛出异常。
不能抛异常是因为:简化线程的异常处理 避免线程阻塞 提高代码的健壮性 保持接口的简洁性 提高线程池的稳定性和效率
三、在启动线程的时候,可以使用run方法吗,run和start有什么区别?
start方法:用来启动线程,通过该线程调用run方法执行run方法中定义的逻辑。start方法只能被调用一次。
run方法:封装了要被线程执行代码,可以被调用多次,如果直接调用run方法,则就是一个普通的方法【通过主线程调用的】,而想通过新线程去调用run方法则需要通过start去调用。
四、线程的几种状态,以及线程之间的切换?
Thread类中的枚举State


当线程对象被创建的时候为新建状态
当线程对象调用了start方法则进入就绪
当抢到CPU则直接进入运行,且就绪和运行都属于可运行状态
当线程对象无法获得锁,则进入阻塞状态,获得到了锁则切换为可运行状态
当线程对象调用了wait方法,则进入等待状态,通过notify方法唤醒,则切换为可运行状态
【可能存在锁竞争,如果是notifyAll方法,也可能存在锁竞争,因为可能有很多个线程同时被唤醒】
当线程对象调用sleep方法,进入计时等待状态,当休眠时间结束,则切换为可运行状态
当线程对象执行完,则进入死亡TERMINATED状态
五、notify和notifyAll区别
notify只随机唤醒一个wait线程【是否随机取决于虚拟机版本,HotSpot貌似是顺序执行】
notifyAll唤醒所有wait的线程
六、wait和sleep的区别
相同点: wait(long)、wait()、sleep(long)三者都是将当前线程暂时放弃cpu的使用权,进入等待状态
wait(long)和sleep(long)都是在一定时间之后重新被唤醒【时间到了就从等待状态变为可运行状态,只要cpu分配到了就可以继续执行】,而wait()如果不主动唤醒则一直等待下去
不同点: wait方法为Object对象的,每个对象都有,而sleep为Thread类的静态方法
重点:

都能让当前线程暂时放弃cpu的使用权,进入阻塞状态
七、新建T1、T2、T3三个线程,如何保证它们按顺序执行?
使用线程中的join方法,join
调用join方法所在的线程将进入计时等待状态,直到调用join方法的线程执行完,
相当于让这两个线程之间有同步关系

八、怎么结束正在进行的线程?
第一种是已经不推荐使用的stop方法
第二种是通过interrupt方法中断线程【推荐的】
如果打断阻塞的线程(sleep,wait,join),则会抛出InterruptedException异常。
打断正常的线程,可以根据打断状态来标记是否退出线程
下面代码中通过if判断interrupted是否为true【默认为false】,为true则直接终止(死)循环,这样线程就终止了

相关文章:
Java中的线程
一、创建线程的几种方式? ① 通过继承Thread类并重写run方法 ,实现简单但不可以继承其他类 Thread底层也是实现了Runnable接口,重写的是run而不是start方法 ②实现Runnable接口并重写run方法, 避免了单继承的局限性ÿ…...
顺序表的实现(迈入数据结构的大门)(完整代码)
seqlist.h #pragma once typedef int SLDataType;#include<stdio.h> #include<stdlib.h> #include<assert.h>typedef struct SeqList {SLDataType* a;int size; // 有效数据个数int capacity; // 空间容量 }SL;//初始化和销毁 void SLInit(SL* ps); void SL…...
neo4j-5.11.0安装APOC插件or配置允许使用过程的权限
在已经安装好neo4j和jdk的情况下安装apoc组件,之前使用neo4j-community-4.4.30,可以找到配置apoc-4.4.0.22-all.jar,但是高版本neo4j对应没有apoc-X.X.X-all.jar。解决如下所示: 1.安装好JDK与neo4j 已经安装对应版本的JDK 17.0…...
mybatis 中 #{}和 ${}的区别是什么?
在 MyBatis 中,#{} 和 ${} 是两种用于参数替换的语法,但它们之间存在一些重要的区别,主要体现在安全性、预编译和动态 SQL 上。 安全性: #{}:这是预编译处理,MyBatis 会为传入的参数生成 PreparedStatement…...
深入解析C#中的接口设计原则
深入解析C#中的接口设计原则 目录 深入解析C#中的接口设计原则 一、接口设计的SOLID原则 二、接口设计的最佳实践 三、接口设计的高级技术 四、结论 接口在面向对象编程中扮演着至关重要的角色。它们是定义行为契约的一种方式,允许实现者提供这些行为的具体实现…...
106短信群发平台在金融和法务行业的应用分析
一、金融行业应用 1.客户通知与提醒:银行、证券、保险等金融机构经常需要向客户发送各类通知和提醒,如账户余额变动、交易确认、扣费通知、理财产品到期提醒等。106短信群发平台可以快速、准确地将这些信息发送到客户的手机上,确保客户及时获…...
Spring AOP(2)
目录 Spring AOP详解 PointCut 切面优先级Order 切点表达式 execution表达式 切点表达式示例 annotation 自定义注解MyAspect 切面类 添加自定义注解 Spring AOP详解 PointCut 上面代码存在一个问题, 就是对于excution(* com.example.demo.controller.*.*(..))的大量重…...
Spring-依赖注入的处理过程
前置知识 1 入口 DefaultListableBeanFactory#resolveDependency 2 每个依赖都有对应的DependencyDescriptor 3 自定绑定候选对象处理器AutowireCapableBeanFactory 注入处理 我们可以看到接口AutowireCapableBeanFactory中有两个方法。 第一个是单个注入: Null…...
2.用python爬取的保存在text文件中的格式为MP4的视频url
文章目录 一、url的保存格式二、MP4视频获取 一、url的保存格式 爬取的视频名字和url保存在text文件中,每一个视频都是一个单独的text,其中text的文件名就是视频的名字,text内容是视频的下载url,并且所有的text都保存在同一个文件…...
Java基于B/S医院绩效考核管理平台系统源码java+springboot+MySQL医院智慧绩效管理系统源码
Java基于B/S医院绩效考核管理平台系统源码javaspringbootMySQL医院智慧绩效管理系统源码 医院绩效考核系统是一个关键的管理工具,旨在评估和优化医院内部各部门、科室和员工的绩效。一个有效的绩效考核系统不仅能帮助医院实现其战略目标,还能提升医疗服…...
UE 蓝图堆栈调试
蓝图打断点后如果想查看断点前的执行逻辑,Tools→Debug→BlueprintDebugger 然后打断点运行,执行顺序是从下往上...
UE4_摄像机_使用摄像机的技巧
学习笔记,不喜勿喷!祝愿生活越来越好! 知识点: a.相机跟随。 b.相机抖动。 c.摄像机移动 d.四元数插值(保证正确旋转方向)。 e.相机注视跟踪。 1、新建关卡序列,并给小车添加动画。 2、创…...
ssm115乐购游戏商城系统+vue
毕业生学历证明系统 设计与实现 内容摘要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统毕业生学历信息管理难…...
【可实战】被测需求理解(需求文档是啥样的、从哪些角度进行需求评审、需求分析需要分析出哪些内容、如何提高需求分析能力)
产品人员会产出一个需求文档,然后组织一个需求的宣讲。测试人员的任务就是在需求宣讲当中,分析需求有没有存在一些问题,然后在需求宣讲结束之后通过分析需求文档,分析里面的测试点并预估一个排期。 一、需求文档是什么样的&#x…...
伪类和伪元素的区别是什么?
一、两者的定义 1.伪类(pseudo-class)是一个以冒号作为前缀,被添加到一个选择器末尾的关键字,当你希望样式在特定状态才被呈现到指定的元素时,你可以往元素的选择器后面加上对应的伪类。 2.伪元素用于创建一些不在文档…...
gorm-sharding分表插件升级版
代码地址: GitHub - 137/gorm-sharding: Sharding 是一个高性能的 Gorm 分表中间件。它基于 Conn 层做 SQL 拦截、AST 解析、分表路由、自增主键填充,带来的额外开销极小。对开发者友好、透明,使用上与普通 SQL、Gorm 查询无差别.解决了原生s…...
MoviePy(Python音视频开发)
音视频基础帧率、码率、分辨率视频格式H.264和H.265视频压缩算法 Moviepy常见剪辑类VideoFlieClipImageFlieClipColorClipTextClipCompositeVideoClipAudioFlieClipCompositeAudioClip 常见操作音视频的读入与导出截取音视频 音视频基础 帧率、码率、分辨率 体积(V…...
Spring中的FileCopyUtils:文件复制的利器与详解
1. 概述 在Spring框架中,FileCopyUtils是一个用于文件复制操作的实用工具类。它提供了一系列静态方法,简化了文件从输入流到输出流、从文件到文件等的复制过程。这些方法都基于NIO(New I/O)技术,提供了高效的文件复制…...
【操作系统】读者—写者问题python解析
一个数据问价或记录可以被多个进程共享,我们把只读该文件的进程称为“读者进程”,其他进程为“写者进程”。允许多个进程同时读一个共享对象,但不允许一个写者进程和其他写者进程或读者进程同时访问共享对象。即:保证一个写者进程…...
【driver5】调用堆栈函数,printk,动态打印,ftrace,proc,sysfs
文章目录 1.内核函数调用堆栈:4个函数2.printk:cat /proc/cmdline查看consolettyS03.动态打印:printk是全局的且只能设打印等级,动态打印可控制选择模块的打印,在内核配置打开CONFIG_DYNAMIC_DEBUG4.top&perf&…...
Google Docs接入Gemini后,这6类高频写作场景效率飙升210%(附可复制Prompt库)
更多请点击: https://intelliparadigm.com 第一章:Gemini深度集成Google Docs的底层机制解析 Gemini 与 Google Docs 的深度集成并非简单的 API 调用叠加,而是依托 Google 的统一 AI 基础设施(AISI)和文档实时协作协议…...
浏览器高阶使用指南:从基础操作到效率系统构建
1. 项目概述:浏览器,远不止是“上网”那么简单“abczsl520/browser-use-skill”这个项目名,乍一看可能会觉得有点“标题党”——浏览器使用技巧?这谁不会啊?点开、输入网址、回车,不就完了吗?如…...
AI相册搜索效率提升300%?Gemini驱动的Google Photos智能检索全解析,含实测对比数据与隐私边界警告
更多请点击: https://intelliparadigm.com 第一章:AI相册搜索效率提升300%?Gemini驱动的Google Photos智能检索全解析,含实测对比数据与隐私边界警告 Google Photos 近期将 Gemini Pro 1.5 深度集成至其搜索后端,支持…...
线束工程化实践:从设计到测试的自动化工具链与开源资源
1. 项目概述:从“Awesome”清单到工程化实践在开源世界里,“Awesome”系列清单就像一个个精心整理的藏宝图,指引着开发者们快速找到某个领域内的优质资源。今天要聊的这个项目fastbeast2023-netizen/awesome-harness-engineering,…...
3PEAK思瑞浦 TPA2772-VS1R MSOP8 运算放大器
特性 供电电压:3V至36V 偏移电压:在25C时最大3.5mV 轨到轨输入和输出 带宽:4.6 MHz 噪声容限:-良好,THD0.0008% 低噪声:1kHz时53nV/vHz 零交叉输入: -优异的总谐波失真加噪声:0.0008%...
Honey Select 2一站式智能优化方案:HS2-HF Patch高效整合200+插件
Honey Select 2一站式智能优化方案:HS2-HF Patch高效整合200插件 【免费下载链接】HS2-HF_Patch Automatically translate, uncensor and update HoneySelect2! 项目地址: https://gitcode.com/gh_mirrors/hs/HS2-HF_Patch 还在为《Honey Select 2》的翻译不…...
为什么92%的AI创作者不敢打印自己的Midjourney作品?揭秘树莓派印相避坑指南,含色彩管理ICC配置包(限免72小时)
更多请点击: https://intelliparadigm.com 第一章:为什么92%的AI创作者不敢打印自己的Midjourney作品? 当一张由 Midjourney 生成的「超写实森林神殿」在屏幕上熠熠生辉时,创作者往往兴奋地截图、转发、设为壁纸——却极少有人按…...
题目五:抽象类 + 接口 混合实现
编程要求:抽象类 Machine:抽象方法 work(),普通方法 start();接口 Clean:抽象方法 clean();类 Robot继承抽象类 Machine 实现接口 Clean;实现所有未实现的方法;测试创建机器人对象&…...
英雄联盟LCU工具:如何用LeagueAkari提升你的游戏效率
英雄联盟LCU工具:如何用LeagueAkari提升你的游戏效率 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit LeagueAkari是一款基于英雄联…...
FoalTS 错误处理机制:构建健壮的后端应用
FoalTS 错误处理机制:构建健壮的后端应用 【免费下载链接】foal Full-featured Node.js framework 🚀 项目地址: https://gitcode.com/gh_mirrors/fo/foal FoalTS 是一个功能全面的 Node.js 框架,提供了强大的错误处理机制,…...
