当前位置: 首页 > news >正文

java中的Thread类解析

实现线程的三种方式

1、继承Thread类,重写里面的run方法

public class MyThread extends Thread{@Overridepublic void run() {System.out.println("threadName:"+Thread.currentThread().getName());}}/*** 方式一:继承Thread类,重写里面的run方法*/@Testvoid thread1(){new MyThread().start();}

2、实现 Runnable 接口 这里直接用匿名内部类 实现了

@Testvoid thread2(){new Thread(()->{System.out.println("threadName:"+Thread.currentThread().getName());},"thread1").start();}

3、实现 Callable接口 然后 放到Thread 中 这样能拿到一个结果

/*** 方式三:实现 Callable接口 然后 放到Thread 中 这样能拿到一个结果* @throws ExecutionException* @throws InterruptedException* @throws TimeoutException*/@Testvoid thread3() throws ExecutionException, InterruptedException, TimeoutException {//Callablefinal FutureTask<String> futureTask = new FutureTask<>(() -> {Thread.sleep(TimeUnit.SECONDS.toMillis(2));System.out.println("ThreadName:" + Thread.currentThread().getName());return "success";});new Thread(futureTask).start();// 调用get 会阻塞在这里 ,成功拿到结果才行final String result = futureTask.get();System.out.println(result);System.out.println("end");}

**注:**另外还可以通过线程池创建线程

main方法中线程执行分析

main方法 中 流程:进程-开启一个主线程-主线程又开启一个子线程
:主线程执行完后 子线程会继续执行。但是用@Test 注解 实现就不行。
原因:@Test 注解时,JUnit会自动创建一个测试线程来运行测试方法,并在测试方法执行完毕后立即终止该线程,而不管该线程是否已经执行完毕。因此,在使用@Test注解时,子线程可能无法执行完毕,因为测试线程已经被终止了
流程:进程-开启一个主线程-主线程又开启一个子线程


public static void main(String[] args) {new Thread(()->{for (int i = 0; i <50; i++) {try {Thread.sleep(TimeUnit.SECONDS.toMillis(1));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程:"+Thread.currentThread().getName()+",正在干活"+",count:"+(i+1));}}).start();for (int i = 0; i < 40; i++) {try {Thread.sleep(TimeUnit.SECONDS.toMillis(1));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程:"+Thread.currentThread().getName()+",正在干活"+",count:"+(i+1));}}

Thread方法

start()

这个就是启动线程的方法,他和run方法的区别是,start是通过本地方法private native void start0();(底层JVM调用,c/c++实现的)开启新的线程然后执行run方法。
而run方法本身就是一个普通方法。

run()

本身就是一个普通方法,如果直接调用它。比如拿刚才的例子,下面换成run方法,其实就是main线程在执行。执行完run方法里然后执行下面的,这就不是多线程了。而是一个线程在顺序执行!!!

@Testvoid mainThreadAndSonThread(){new Thread(()->{for (int i = 0; i <50; i++) {try {Thread.sleep(TimeUnit.SECONDS.toMillis(1));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程:"+Thread.currentThread().getName()+",正在干活"+",count:"+(i+1));}}).run();for (int i = 0; i < 40; i++) {try {Thread.sleep(TimeUnit.SECONDS.toMillis(1));} catch (InterruptedException e) {e.printStackTrace();}System.out.println("线程:"+Thread.currentThread().getName()+",正在干活"+",count:"+(i+1));}}

相关文章:

java中的Thread类解析

实现线程的三种方式 1、继承Thread类&#xff0c;重写里面的run方法 public class MyThread extends Thread{Overridepublic void run() {System.out.println("threadName:"Thread.currentThread().getName());}}/*** 方式一&#xff1a;继承Thread类&#xff0c;重…...

如何正确清理DNS缓存

前言 有些场景&#xff0c;需要刷新自己本机的DNS缓存&#xff0c;比如说某个cdn访问不到&#xff0c;某个网络不通等等&#xff0c;都有可能是由于DNS缓存记录了错误的ip映射关系而导致的。本文介绍下如何刷新本机的DNS缓存。 Mac 如果你是mac用户&#xff0c;执行以下操作…...

Git从基础到实践

1.Git是用来做什么的&#xff1f; git就是一款版本控制软件&#xff0c;主要面向代码的管理。你可以理解为Git是一个代码的备份器&#xff0c;给你的每一次修改后的代码做个备份&#xff0c;防止丢失&#xff0c;这个是git最基本的功能。 其次,git不止备份,当你需要比对多…...

C 保留字解释

语句 // 单行注释 /* */ 多行注释 #include 头文件引入声明 #define 预先定义 return 结果返回语句&#xff08;可以带参数&#xff0c;也可不带参数&#xff09; printf(); 输出 if 条件语句 else 条件语句否定分支&#xff08;和 if 连用&a…...

【Web】https 与 http 的区别

文章目录 一、基本概念二、区别对比 一、基本概念 http &#xff1a;超文本传输协议&#xff0c;一种网络传输协议&#xff0c;一个客户端和服务器请求和应答的标准&#xff08;TCP&#xff09;。 https &#xff1a;简单讲就是在http基础上 使用 SSL 或 TLS 对请求和响应进行…...

【KVM】半虚拟化和全虚拟化技术

前言 大家好&#xff0c;我是秋意零。 上一篇的介绍了软件和硬件虚拟化类型&#xff0c;现在来看看半虚拟化技术和通过硬件虚拟化类型辅助的全虚拟化技术吧&#xff01; &#x1f47f; 简介 &#x1f3e0; 个人主页&#xff1a; 秋意零&#x1f525; 账号&#xff1a;全平台…...

react中的useReducer复杂的状态管理

一、useReducer reducer官网教程 useReducer 是 React 提供的一个用于状态管理的 Hook。它可以替代 useState&#xff0c;更适用于处理复杂的状态逻辑。 useReducer 接受一个reducer函数和一个初始状态&#xff0c;并返回当前状态以及一个 dispatch 函数&#xff0c;用来触发…...

SpringCloudAlibaba - 项目完整搭建(Nacos + OpenFeign + Getway + Sentinel)

目录 一、SpringCloudAlibaba 项目完整搭建 1.1、初始化项目 1.1.1、创建工程 1.1.2、配置父工程的 pom.xml 1.1.3、创建子模块 1.2、user 微服务 1.2.1、配置 pom.xml 1.2.2、创建 application.yml 配置文件 1.2.3、创建启动类 1.2.4、测试 1.3、product 微服务 1…...

如何使用Python的matplotlib和seaborn库绘制颜色渐变的高级散点图

前言 我的科研论文中需要绘制一个精美的散点图&#xff0c;表达的是各个散点距离中心点的距离远近情况&#xff0c;特点如下&#xff1a; 绘图的美观程度高根据距离目标点的距离的不同&#xff0c;各个散点能有颜色或者是透明度上的区分相应的统计量是与中心点&#xff08;目…...

根据Word模板,使用POI生成文档

突然想起来有个小作业&#xff1a;需要根据提供的Word模板填充数据。这里使用POI写了一个小demo验证下。 测试用模板&#xff1a; 执行结果 1.引入依赖坐标 <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId&…...

大语言模型的学习路线和开源模型的学习材料《一》

文章目录 第一层 LLMs to Natural Language Processing (NLP)第一重 ChatGLM-6B 系列ChatGLM3ChatGLM2-6BChatGLM-6B第十重 BaichuanBaichuan2Baichuan-13Bbaichuan-7B第十一重 Llama2第二重 Stanford Alpaca 7B第三重 Chinese-LLaMA-Alpaca第四重 小羊驼 Vicuna第五重 MOSS第六…...

【案例】3D地球

效果图&#xff1a; 直接放源码 <!DOCTYPE html> <html> <head><meta http-equiv"Content-Type" content"text/html; charsetutf-8" /><meta name"viewport" content"initial-scale1.0, user-scalableno" …...

安全组问题 访问华为云服务器端口

一些常用的安全组的配置示例&#xff0c;包括远程登录云服务器&#xff0c;对外提供网站访问、不同安全组内实例内网互通等。 通常情况下&#xff0c;安全组默认拒绝所有来自外部的请求。您需要遵循白名单原则添加安全组入方向规则&#xff0c;允许来自外部的特定请求访问安全组…...

音视频常见问题(七):首开慢

本文主要讨论音视频应用中的首开慢问题&#xff0c;文章介绍了首开慢的产生原因&#xff1a;DNS解析耗时、网络传输协议耗时、传输网络调度耗时&#xff0c;并提供了排查方式和解决方案。即构科技的Express SDK和MSDN网络可以有效的解决首开慢问题&#xff0c;且节省开发成本。…...

[SSD综述1.2] SSD 和 HDD(机械硬盘) 区别?

​ 依公知及经验整理,原创保护,禁止转载。 专栏 《SSD入门到精通系列》 <<<< 返回总目录 <<<< 文章目录 前言1. 速度差异多大1.1 常见产品速度1.2 最新产品速度2 机械硬盘和固态硬盘的差异点3 引起速度差异的原因是什么(硬件)?3.1 存储介质不同3.…...

ali sdm docker

当然要先安装docker和docker-compose cd /usr/local mkdir sdm cd sdm touch docker-compose.yml&#xff0c;编辑内容如下&#xff1a; version: "3" services:sdm:image: registry.cn-shanghai.aliyuncs.com/nls-cloud/sdm:latestcontainer_name: nls-cloud-s…...

HCIE-kubernetes(k8s)-Authentication身份验证

1、远程登录 1、kubeconfig方式 在master上都是以kubeconfig方式登录的&#xff0c;并不是说有一个文件叫kubeconfig。 默认使用的配置文件是~/.kube/config 这个配置文件&#xff0c;而这个配置文件是通过这个文件/etc/kubernetes/admin.conf 如果在node上执行命令&#xff…...

uniapp开发小程序接入阿里云TTS语音合成(RESTful API)

流程 首先小程序后台配置白名单 1.1 路径&#xff1a;开发-开发管理-开发设置-服务器域名-request合法域名 1.2 request合法域名参数&#xff1a; https://nls-meta.cn-shanghai.aliyuncs.com https://nls-gateway-cn-shanghai.aliyuncs.com引入alitts.js页面使用…...

稳定性测试—fastboot和monkey区别

一、什么是稳定性测试 稳定性测试是指检验程序在一定时间内能否稳定地运行&#xff0c;在不同的场景下能否正常地工作的过程。主要目的是检测崩溃、内存泄漏、堆栈错误等缺陷。 二、Monkey 1.什么是Monkey 是一个命令行工具&#xff0c;通常在adb安卓调试运行&#xff0c;模…...

Python库Requests的爬虫程序爬取视频通用模版

目录 一、引言 二、Requests库介绍 三、通用视频爬虫模板设计 1、确定目标网站和视频页面结构 2、发送HTTP请求获取页面内容 3、解析HTML内容提取视频链接 4、下载视频文件 四、模板应用与实践 五、注意事项 总结与展望 一、引言 随着互联网的发展&#xff0c;视频内…...

基于距离变化能量开销动态调整的WSN低功耗拓扑控制开销算法matlab仿真

目录 1.程序功能描述 2.测试软件版本以及运行结果展示 3.核心程序 4.算法仿真参数 5.算法理论概述 6.参考文献 7.完整程序 1.程序功能描述 通过动态调整节点通信的能量开销&#xff0c;平衡网络负载&#xff0c;延长WSN生命周期。具体通过建立基于距离的能量消耗模型&am…...

基于服务器使用 apt 安装、配置 Nginx

&#x1f9fe; 一、查看可安装的 Nginx 版本 首先&#xff0c;你可以运行以下命令查看可用版本&#xff1a; apt-cache madison nginx-core输出示例&#xff1a; nginx-core | 1.18.0-6ubuntu14.6 | http://archive.ubuntu.com/ubuntu focal-updates/main amd64 Packages ng…...

【机器视觉】单目测距——运动结构恢复

ps&#xff1a;图是随便找的&#xff0c;为了凑个封面 前言 在前面对光流法进行进一步改进&#xff0c;希望将2D光流推广至3D场景流时&#xff0c;发现2D转3D过程中存在尺度歧义问题&#xff0c;需要补全摄像头拍摄图像中缺失的深度信息&#xff0c;否则解空间不收敛&#xf…...

将对透视变换后的图像使用Otsu进行阈值化,来分离黑色和白色像素。这句话中的Otsu是什么意思?

Otsu 是一种自动阈值化方法&#xff0c;用于将图像分割为前景和背景。它通过最小化图像的类内方差或等价地最大化类间方差来选择最佳阈值。这种方法特别适用于图像的二值化处理&#xff0c;能够自动确定一个阈值&#xff0c;将图像中的像素分为黑色和白色两类。 Otsu 方法的原…...

Qt Http Server模块功能及架构

Qt Http Server 是 Qt 6.0 中引入的一个新模块&#xff0c;它提供了一个轻量级的 HTTP 服务器实现&#xff0c;主要用于构建基于 HTTP 的应用程序和服务。 功能介绍&#xff1a; 主要功能 HTTP服务器功能&#xff1a; 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...

【Go】3、Go语言进阶与依赖管理

前言 本系列文章参考自稀土掘金上的 【字节内部课】公开课&#xff0c;做自我学习总结整理。 Go语言并发编程 Go语言原生支持并发编程&#xff0c;它的核心机制是 Goroutine 协程、Channel 通道&#xff0c;并基于CSP&#xff08;Communicating Sequential Processes&#xff0…...

视频字幕质量评估的大规模细粒度基准

大家读完觉得有帮助记得关注和点赞&#xff01;&#xff01;&#xff01; 摘要 视频字幕在文本到视频生成任务中起着至关重要的作用&#xff0c;因为它们的质量直接影响所生成视频的语义连贯性和视觉保真度。尽管大型视觉-语言模型&#xff08;VLMs&#xff09;在字幕生成方面…...

浅谈不同二分算法的查找情况

二分算法原理比较简单&#xff0c;但是实际的算法模板却有很多&#xff0c;这一切都源于二分查找问题中的复杂情况和二分算法的边界处理&#xff0c;以下是博主对一些二分算法查找的情况分析。 需要说明的是&#xff0c;以下二分算法都是基于有序序列为升序有序的情况&#xf…...

iOS性能调优实战:借助克魔(KeyMob)与常用工具深度洞察App瓶颈

在日常iOS开发过程中&#xff0c;性能问题往往是最令人头疼的一类Bug。尤其是在App上线前的压测阶段或是处理用户反馈的高发期&#xff0c;开发者往往需要面对卡顿、崩溃、能耗异常、日志混乱等一系列问题。这些问题表面上看似偶发&#xff0c;但背后往往隐藏着系统资源调度不当…...

MFE(微前端) Module Federation:Webpack.config.js文件中每个属性的含义解释

以Module Federation 插件详为例&#xff0c;Webpack.config.js它可能的配置和含义如下&#xff1a; 前言 Module Federation 的Webpack.config.js核心配置包括&#xff1a; name filename&#xff08;定义应用标识&#xff09; remotes&#xff08;引用远程模块&#xff0…...