多线程基础-创建线程

news/2025/10/28 16:15:17/文章来源:https://www.cnblogs.com/huaixu-blog/p/19172106

线程的创建

线程的创建有三种方法

  1. 继承Thread类,并重写run方法
  2. 实现Runable接口,并实现run方法
  3. 实现Callabke接口,并实现call方法(此处不介绍)

案例:模拟文件下载
方法一:

public class ThreadTest1 extends Thread {private String fileName;// 构造方法,传入文件名public ThreadTest1(String fileName) {this.fileName = fileName;}@Overridepublic void run() {download(fileName);}// 模拟下载方法private void download(String file) {System.out.println(Thread.currentThread().getName() + " 开始下载:" + file);try {// 模拟下载耗时for (int i = 1; i <= 5; i++) {System.out.println(Thread.currentThread().getName() + " 正在下载 " + file + ",进度:" + (i * 20) + "%");Thread.sleep(500); // 模拟下载过程}} catch (InterruptedException e) {System.out.println("用户终止");}System.out.println(Thread.currentThread().getName() + " 下载完成:" + file);}// 主函数public static void main(String[] args) {ThreadTest1 t1 = new ThreadTest1("file1.zip");ThreadTest1 t2 = new ThreadTest1("file2.mp4");ThreadTest1 t3 = new ThreadTest1("file3.pdf");// 启动多个线程t1.start();t2.start();t3.start();}
}

方法二:

public class ThreadTest2 implements Runnable {private String fileName;public ThreadTest2(String fileName) {this.fileName = fileName;}@Overridepublic void run() {download(fileName);}private void download(String file) {System.out.println(Thread.currentThread().getName() + " 开始下载:" + file);try {for (int i = 1; i <= 5; i++) {System.out.println(Thread.currentThread().getName() + " 正在下载 " + file + ",进度:" + (i * 20) + "%");Thread.sleep(500);}} catch (InterruptedException e) {e.printStackTrace();}System.out.println(Thread.currentThread().getName() + " 下载完成:" + file);}public static void main(String[] args) {// 创建 Runnable 实例ThreadTest2 task1 = new ThreadTest2("movie.mp4");ThreadTest2 task2 = new ThreadTest2("document.pdf");ThreadTest2 task3 = new ThreadTest2("game.zip");// 将任务交给 Thread 执行Thread t1 = new Thread(task1, "下载线程-1");Thread t2 = new Thread(task2, "下载线程-2");Thread t3 = new Thread(task3, "下载线程-3");// 启动线程t1.start();t2.start();t3.start();}
}

为什么推荐实现 Runnable 接口而不是继承 Thread?

两种方式的本质区别

方式 1:继承 Thread

class MyThread extends Thread {@Overridepublic void run() {System.out.println("线程运行中...");}
}
new MyThread().start();

Thread 是一个 类,它本身实现了 Runnable 接口;
当你继承它时,你其实是在继承整个线程类的实现;
这样做导致你的类已经“是一个线程对象”。

方式 2:实现 Runnable

class MyTask implements Runnable {@Overridepublic void run() {System.out.println("线程运行中...");}
}
new Thread(new MyTask()).start();

这里只定义了要执行的任务逻辑;
线程的启动、管理由 Thread 对象负责;
更加灵活、解耦。

总结: 我们希望各个模块、类的职能更清晰,实现功能的类只关注功能实现,而不必关心线程创建终止的逻辑

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

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

相关文章

dataframe 和 numpy 数组有什么不同?

在cropformer相关的基因组预测任务场景中,DataFrame(通常指Pandas DataFrame)与NumPy数组均为数据处理核心格式,但二者在数据结构、功能定位、适用场景上存在显著差异,具体区别可结合文献中Cropformer的数据流处理…

《植物大战僵尸:重植版》无障碍补丁 | An accessibility mod for Plants vs. Zombies™: Replanted

开发中... 项目信息游戏版本:[Steam] 植物大战僵尸™:重植版 开发状态:开发中 项目源码:https://github.com/game-a11y/PvZ-Replanted-A11y 发布地址:(开发中,尚无可用发布版。想尝鲜可以自行导入源码使用) 项目…

rac日常维护

1.启动数据库oracle账号执行[oracle@rac01 ~]$srvctl start instance -d slnngk -i slnngk2[oracle@rac01 ~]$srvctl start database -d slnngk2.查看资源 grid账号下执行[grid@rac01 ~]$ crsctl stat res -t --------…

2025年上海直连全球云网络公司权威推荐榜单:AIGPU专用算力/GPU计费模式/GPU弹性算力源头厂家精选

随着全球数字化转型加速,直连云网络市场迎来爆发式增长,上海作为中国云计算产业的重要枢纽,其直连全球云网络服务能力备受关注。 据全球云计算市场分析报告显示,2024年全球直连云网络服务市场规模达到185亿美元,预…

打开双wifi STA+AP并发 - M

描述:rk3588+android13+ap6611s,系统默认打开热点,会把WiFi关掉,需要并发使用。1.正基的模块需要添加宏定义: external/wifi_driver/bcmdhd/Makefile+CONFIG_BCMDHD_STATIC_IF :=y@@ -465,6 +486,10 @@ ifneq ($(…

drools脚本中 matches 的用法

value matches ".*\\d.*"rule "Example" no-loop truewhenVar(key=="Example.Start",$startTime:time) and not Var(key=="Example.End",value=="1") and Var(key=…

2025年重庆别墅装修公司权威推荐榜单:大宅设计/大平层设计/别墅设计源头厂家精选

随着重庆高端住宅市场持续升温,别墅及大平层装修需求呈现专业化、定制化趋势。据行业统计数据显示,2024年重庆主城区别墅装修市场规模突破85亿元,其中设计施工一体化服务占比达67%,较上年提升12个百分点。在此背景…

IvorySQL 社区摆摊啦,GOTC 2025 开源集市等你来玩!

全球开源技术峰会(Global Open-source Technology Conference) GOTC 2025 将于 11 月 1 日至 2 日在北京隆重举行。 为期 2 天的开源技术与行业盛会,将通过行业展览、主题发言、圆桌讨论等形式来诠释此次大会主题 —…

python 界面开发笔记

pyside6的版本要和python的版本对应 看官网 https://wiki.qt.io/Qt_for_Python 如果不对应会出错,提示什么未加载dll 我用的是 python3.12.10 和pyside6.10 下载地址 https://www.python.org/downloads/release/python…

基于AMBA总线协议的Verilog语言模型实现

一、AMBA总线协议模型架构 核心模块组成协议 主要模块 功能描述AHB 主控制器/从设备 突发传输控制、仲裁逻辑AXI 主接口/从接口/通道管理 多通道数据流、乱序完成处理APB 主设备/从设备/桥接器 寄存器访问、两阶段传输…

2025年高速离心研磨抛光机厂家权威推荐榜单:环保研磨抛光机/钛合金研磨抛光机/不锈钢研磨抛光机源头厂家精选

在精密制造时代,高速离心研磨抛光机已成为提升工件表面质量的核心装备,其高效、精密的处理能力正重塑着现代工业的制造标准。 在当今精密制造领域,高速离心研磨抛光技术凭借其高效率、高一致性和低人工成本的优势,…

【System Beats!】第五章 优化程序性能

性能优化概况在实际生活中,需要提升软件性能,最终目标是编写高效的代码,最大限度地利用硬件资源。 性能优化通常考虑以下三方面:选择恰当的算法和数据结构 理解编译器的能力和局限性 大规模任务下进行并行计算需要…

2025年密集母线槽品牌

摘要 密集母线槽行业在2025年迎来智能化、数字化转型浪潮,随着数据中心、高端建筑和工业基础设施的快速发展,市场对高效、安全、可靠的电力分配解决方案需求激增。本文基于行业调研和用户反馈,整理出排名前十的密集…

2025年口碑好的密集母线槽产品

摘要 密集母线槽行业在2025年迎来智能化、数字化转型浪潮,随着数据中心、智慧城市和绿色建筑需求的增长,市场对高可靠性、高效能母线槽产品的需求持续上升。本文基于行业数据和用户反馈,整理出口碑优秀的密集母线槽…

2025年密集母线槽品牌排行榜

文章摘要 随着城市化进程加速和智能电网发展,密集母线槽行业在2025年迎来技术创新高峰,产品趋向智能化、高效化。本文基于市场调研和用户口碑,整理出2025年密集母线槽品牌排名前十榜单,为行业采购和决策提供参考。…

10 28

P8097积累trick:在正序难的时候就倒序看 倒序则会变为让一个农场开始生产 删去两个活跃农场之间的路 添加一条边可以发现倒序的过程不会让奶牛从有关的变为无关的 故倒序地做记录每个的第一次变为有关的时间即可P8271积…

混合动力汽车MATLAB建模实现方案

一、系统架构设计 混合动力汽车(HEV)的MATLAB建模需包含以下核心模块:动力总成系统发动机模型(基于MAP数据或物理机理) 电机/发电机模型(PMSM/IM模型) 电池管理系统(SOC估算、热管理) 离合器与变速器模型(CV…

2025年口碑好的多功能综合杆公司排名前十

摘要 随着智慧城市建设的加速,多功能综合杆行业在2025年迎来快速发展,集成照明、监控、环境监测等多功能于一体,提升城市管理效率。本文基于行业数据和用户口碑,整理出排名前十的公司榜单,为采购决策提供参考。榜…

2025 年凹槽铝方通,吊顶铝方通,铝方通格栅厂家最新推荐,产能、专利、环保三维数据透视

引言 随着建筑装饰行业对铝方通细分品类需求的升级,凹槽铝方通、吊顶铝方通、铝方通格栅的产品性能与生产标准愈发受关注。为精准筛选优质厂家,本次推荐基于中国建筑装饰协会 2025 年度铝制装饰材料专项测评数据,采…

大模型应用开发--[笔记未完待续]

大模型应用开发 初识大模型认识AI 大模型应用部署大模型(ollama部署模型),掌握阿里云百炼平台使用 调用大模型,使用http方式调用大模型 大模型应用,与传统应用的区别 技术方案SpringAI基本使用 阻塞调用和流式调用…