当前位置: 首页 > 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;视频内…...

【搭建单双目散斑结构光Demo】

介绍 最近搭了一个用于研究的单目散斑结构光的硬件Demo。发射端使用VCSEL模组投影散斑&#xff0c;接收端使用工业相机采集图像。工业相机曝光时输出同步信号给驱动板&#xff0c;驱动板控制VCSEL发光投射出散斑图案&#xff0c;同步时间精度可以达到十微秒。也可以配两个工业…...

告别Electron臃肿!用Tauri 2.0 + Rust打造你的第一个轻量级桌面应用(附完整项目结构解析)

从Electron到Tauri 2.0&#xff1a;用Rust重构现代桌面应用开发范式 当Electron应用体积膨胀到200MB起步时&#xff0c;我们不得不重新思考桌面开发的未来。Tauri 2.0的出现绝非偶然——这是前端开发者对性能与体验的集体觉醒。本文将带你深入这个基于Rust的轻量级框架&#xf…...

手把手教你用EFR32BG22实现BLE串口透传(附GATT配置全流程)

EFR32BG22低功耗蓝牙串口透传开发实战指南 在物联网终端设备开发中&#xff0c;蓝牙串口透传是最基础也最实用的功能之一。本文将带您深入EFR32BG22芯片的蓝牙开发世界&#xff0c;从零开始构建一个高效的BLE串口透传服务。不同于简单的代码搬运&#xff0c;我们将重点关注GATT…...

告别单行输入:在Python IDLE Shell中轻松编辑多行代码的完整指南

告别单行输入&#xff1a;在Python IDLE Shell中轻松编辑多行代码的完整指南 对于Python初学者来说&#xff0c;IDLE Shell是一个既熟悉又陌生的存在。熟悉是因为它随Python安装包默认提供&#xff0c;陌生则源于大多数人仅将其视为简单的交互式命令行工具。实际上&#xff0c;…...

保姆级教程:从零配置ROS2自定义消息包(含CMake/ament避坑指南)

从零构建ROS2自定义消息包的终极实践指南 在机器人开发领域&#xff0c;ROS2的消息系统是模块间通信的核心枢纽。当标准消息类型无法满足特定需求时&#xff0c;自定义消息包便成为开发者必须掌握的技能。本文将带您从零开始&#xff0c;逐步构建一个完整的ROS2自定义消息包&am…...

Dexter深度解析:如何用多Agent架构打造自主金融研究AI

一、为什么需要金融AI Agent&#xff1f; 1.1 传统金融研究的痛点 作为开发者&#xff0c;你是否遇到过这样的场景&#xff1a;需要分析一家上市公司的财务状况&#xff0c;却要花费数小时甚至数天时间&#xff1f; 传统金融研究面临三大挑战&#xff1a; 数据分散&#xff1a;…...

会用AI的人,早已拉开职场差距!全岗位工作范式重构进行时

AI深度融入职场&#xff0c;正在改写工作的底层逻辑&#xff0c;会用AI的从业者&#xff0c;已在工作效率与职业发展上形成明显优势。从开发人员的研发流程&#xff0c;到方案人员的工作模式&#xff0c;再到各行各业的基础岗位&#xff0c;AI不再只是简单的效率工具&#xff0…...

reyax_lora轻量级LoRa模块串口驱动库设计与应用

1. 项目概述reyax_lora是一个面向嵌入式平台的轻量级串口驱动库&#xff0c;专为控制 Reyax 公司 RYLR998&#xff08;433/470/868/915 MHz&#xff09;与 RYLR498&#xff08;2.4 GHz&#xff09;LoRa 透传模块而设计。该库不依赖操作系统抽象层&#xff0c;以裸机&#xff08…...

颠覆PDF转换体验:Marker无缝实现25页/秒全场景文档格式精准迁移

颠覆PDF转换体验&#xff1a;Marker无缝实现25页/秒全场景文档格式精准迁移 【免费下载链接】marker 一个高效、准确的工具&#xff0c;能够将 PDF 和图像快速转换为 Markdown、JSON 和 HTML 格式&#xff0c;支持多语言和复杂布局处理&#xff0c;可选集成 LLM 提升精度&#…...

Easy-Scraper:Rust 构建的现代化网页数据采集解决方案

Easy-Scraper&#xff1a;Rust 构建的现代化网页数据采集解决方案 【免费下载链接】easy-scraper Easy scraping library 项目地址: https://gitcode.com/gh_mirrors/ea/easy-scraper 在数据驱动决策的时代&#xff0c;网页数据采集已成为企业获取市场情报、研究人员收集…...