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

使用 Thread 子类创建线程和使用 Thread 直接创建线程(Runnable接口)的区别

方式 1:继承 Thread 子类创建线程

Java 中类是单继承,自定义类直接继承Thread,重写run()方法,实例化对象后调用start()启动线程。

// 1.自定义线程类,继承Thread class MyThread extends Thread { // 重写线程执行逻辑run方法 @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("继承Thread线程执行:" + i); } } } public class ThreadDemo { public static void main(String[] args) { // 创建线程对象 MyThread t1 = new MyThread(); MyThread t2 = new MyThread(); // 启动线程,自动调用run() t1.start(); t2.start(); } }

方式 2:实现 Runnable 接口创建线程

自定义类实现Runnable接口,重写run(),将实现类实例传入Thread构造器,通过 Thread 对象启动线程。

// 1.实现Runnable接口 class MyRunnable implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println("实现Runnable线程执行:" + i); } } } public class RunnableDemo { public static void main(String[] args) { // 创建任务对象 MyRunnable task = new MyRunnable(); // 同一个任务传入多个Thread,实现资源共享 Thread t1 = new Thread(task); Thread t2 = new Thread(task); t1.start(); t2.start(); } }

继承 Thread vs 实现 Runnable 核心区别对比

1. 继承关系限制(最大差异)

1.继承 Thread 类
Java 为单继承机制,一旦自定义类继承Thread,该类无法再继承其他父类,扩展性受限。
2.实现 Runnable 接口
接口支持多实现,自定义类实现Runnable后,依然可以继承其他父类,无继承限制,代码扩展性更强。

2. 资源共享能力

1.继承 Thread
每个Thread子类对象都是独立线程,各自拥有独立成员变量,无法共享资源。
示例:卖票场景,两个线程各持有一份票数,会重复卖出全部票数。
2.实现 Runnable
多个Thread对象可以传入同一个 Runnable 任务实例,所有线程共用任务对象的成员变量,天然支持多线程资源共享,适合售票、计数器等并发场景。

3. 代码结构对比表

对比维度继承 Thread 类实现 Runnable 接口
继承规则单继承,无法再继承其他类接口多实现,无继承限制
资源共享不支持,每个对象独立资源支持,多线程共用同一个任务
耦合度高,线程与业务逻辑绑定低,任务与线程调度分离
适用场景简单独立线程,无需共享资源多线程并发、资源共享、线程池开发
扩展性差,受单继承约束优秀,推荐企业开发使用
http://www.jsqmd.com/news/1075748/

相关文章:

  • Sketch Measure插件终极教程:5分钟掌握自动化设计标注,提升团队协作效率
  • 近期量化学习四步走,AI 只适合跟着阶段用
  • 质量管理工具-矩阵数据分析法
  • Python实现LDA主题模型:主题分布、主题强度与强度演变分析全攻略
  • 【招聘】第二篇:自下而上:为什么最好的招聘决策,往往不应该从HR开始
  • 2016-2022年中国10米分辨率逐年不透水面数据集(CAIS)
  • Seedance 2.5视频生成模型七月登场:30秒原生直出+50素材+周星驰IP的国产视频新纪元
  • 如何选择macOS Intel Wi-Fi驱动的最佳方案:itlwm与AirportItlwm决策指南
  • 在STM32H743上部署轻量口罩检测模型的全流程实践
  • 2014-2026年中国全域公园绿地矢量数据集|逐年更新|生态底图
  • AI旅行建议防坑指南:五步交叉验证法实战
  • Adobe XD 59.0安装包免费下载及详细安装教程
  • 运维转大模型:团队协作中的使用边界
  • 戴森V6/V7电池开源固件升级完全指南:解锁隐藏的电芯平衡功能
  • 一文读懂:百年赋老鹰茶到底是不是古树茶?
  • 技术洞察:Social Analyzer社交情报分析系统架构解析
  • Transformer做电池SOH估算:先别急,直接用反而最差
  • Zoo Text-to-CAD:用自然语言驱动机械设计革命
  • SkillOpt 让你的 Skill 实现自进化
  • 【招聘】第五篇:边界之外:为什么你下一个最重要的候选人,往往不在你熟悉的圈子里
  • 手写一个基于Qt的轻量级示波器界面,附源码
  • [1364]bcrypt用法--密码哈希
  • 浏览器中的微信革命:wechat-need-web插件让你随时随地聊天
  • OAuth2 登录与群 Webhook 开放接入
  • JDK 9 的 PlatformClassLoader 只是简单改个名吗?
  • SDKMAN CLI:用 Go 重写版本管理工具的探索
  • 别再死磕SEO!AI时代新流量入口GEO,抢占AI答案推荐位
  • 一键解锁无损音乐宝藏:TIDAL Downloader Next Generation 高解析度音频下载全攻略
  • 博客系统接口需求分析:从模块拆解到自动化测试设计
  • 机器学习小数据训练实战:四维评估与高效落地方法