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

Java 继承 Thread 与实现 Runnable 创建线程区别

在 Java 多线程入门学习中,继承 Thread 类、实现 Runnable 接口是两种最基础的线程创建方式,日常开发经常用到,很多初学者分不清两者区别与使用场景,本文从代码、继承特性、资源共享、设计思想几个方面对比梳理。

一、两种方式代码示例

1、继承 Thread 类创建线程

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

java

运行

class MyThread extends Thread { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(getName() + ":" + i); } } } public class Test { public static void main(String[] args) { MyThread t = new MyThread(); t.setName("线程1"); t.start(); } }

2、实现 Runnable 接口创建线程

自定义类实现 Runnable 接口,重写 run (),将任务对象传入 Thread 构造方法,调用 start () 开启线程。

java

运行

class MyTask implements Runnable { @Override public void run() { for (int i = 0; i < 5; i++) { System.out.println(Thread.currentThread().getName() + ":" + i); } } } public class Test { public static void main(String[] args) { MyTask task = new MyTask(); Thread t1 = new Thread(task, "线程A"); Thread t2 = new Thread(task, "线程B"); t1.start(); t2.start(); } }

二、核心区别

  1. 继承限制 继承 Thread:Java 单继承机制,继承 Thread 后无法再继承其他父类,类拓展性差。 实现 Runnable:接口可以多实现,实现 Runnable 之后,类还能继承其他父类、实现其他接口,没有单继承约束。

  2. 资源共享 继承 Thread:每次 new 子类都是独立对象,成员变量各自独立,很难实现多线程共用同一份数据。 实现 Runnable:多个 Thread 线程可以共用同一个 Runnable 任务对象,天然支持多线程资源共享,适合售票、抢资源等场景。

  3. 设计职责 继承 Thread:线程对象和业务任务耦合在同一个类中,违背单一职责原则,Thread 既负责线程调度又承载任务。 实现 Runnable:任务和线程解耦,Runnable 只封装业务逻辑,Thread 只负责创建、启动线程,代码分层清晰。

三、使用场景总结

  1. 优先选择实现 Runnable:需要共享资源、已有父类要继承、配合线程池开发(线程池接收参数为 Runnable),企业项目绝大多数场景使用。
  2. 选用继承 Thread:任务简单独立、不需要数据共享、小型简易测试代码。

补充知识点

  1. Thread 类底层本身实现了 Runnable 接口,两种方式最终都是重写 run () 存放线程任务。
  2. start () 方法用来向操作系统申请创建新线程,自动执行 run ();直接调用 run () 只是普通方法调用,不会开启新线程。
  3. JDK8 及以上可以用 Lambda 表达式简写 Runnable,简化代码书写:new Thread (()-> System.out.println ("线程任务")).start ();
http://www.jsqmd.com/news/958993/

相关文章:

  • STM32新手必看:用Proteus 8.13仿真ILI9341液晶屏,从零到显示“Hello World”的完整流程
  • 别再只会用‘等于’了!西门子博图TIA Portal比较指令的7种实战用法(附S7-1200程序)
  • 工控必看:温度传感器快速选型指南
  • 快速原型对比:用快马一键生成trae solo与ide的轻量级demo
  • 别再只会用BT下载了!手把手带你用Python模拟DHT协议,理解P2P网络的核心
  • 【2023个人AI助手黄金配置指南】:CPU/GPU/内存/存储四维平衡公式首次公开(附实测性能衰减拐点数据)
  • UOS统信服务器安全策略实战指南:从入门到精通
  • openclaw添加与更换服务商模型
  • 机器马达异响?别慌,先教你如何通过声音辨别健康状态
  • 持续高扩容!2026-2032电子防窥膜分析研究报告,深挖行业蓝海机遇
  • 广东谋根全新拖拽式网页 + 多语言 + 分离式架构:CRMEB二开开启独立站新纪元结合AI Schema加持让企业营销全系统打通,从私欲营销到大模型优化领先同行
  • 国际EMBA排行榜2026最新榜单|顶尖项目实力对比与报考解析
  • # 让 AI 扫描你的电脑——Codex/Claude Code 一句 Prompt 带来的震撼体验
  • 不止于脚本:从一次流片经历看VCS混合仿真环境的最佳实践与自动化
  • Visdom从入门到‘玩坏’:除了画Loss曲线,你还能用它做这些意想不到的骚操作
  • 新手福音:在快马平台免配置玩转anaconda与python数据分析
  • 智能债券整合不是选择题,而是生存线(2024Q2全市场AI债券平台渗透率骤降11%的真相)
  • 用Wireshark和Python实战拆解pcap文件:从十六进制到可读数据包的完整解析流程
  • 校园二手书交易|基于SprinBoot+vue的校园二手书交易管理系统(源码+数据库+文档)
  • 做ae模板没灵感?这5个网站,帮你轻松搞定
  • 终极指南:如何在Linux系统上轻松安装和配置foo2zjs打印机驱动解决方案
  • 避坑指南:Amber膜体系模拟中,从CHARMM-GUI下载文件到成功运行MD的五个关键检查点
  • 2026年张家口代办工程监理资质市场深度解析:河北丰点企业管理咨询有限公司为何成为企业优选? - 2026年企业资讯
  • Windows下用VS2019编译CEF官方Demo,手把手搞定离屏渲染(OSR)环境
  • 2026 SaaS增长:挖掘海外 Affiliate 的 7 个隐藏渠道
  • 你的手机NFC除了支付还能这么玩?解锁NTAG芯片的自动化指令与创意交互实践
  • Tosylate-DPA-714介导¹⁸F-DPA-714 PET成像的前沿进展
  • 告别增删改查!深入剖析C# WinForm人员管理系统的5个高级技巧与优化实战
  • 为什么92%的慈善AI试点失败?——资深公益技术架构师亲授5大避坑红线与3套通过ISO/IEC 23894认证的集成框架
  • 大模型时代AI工具合规实践(2024全球监管动态+国内备案实操白皮书)