当前位置: 首页 > 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.rkmt.cn/news/1470665.html

相关文章:

  • 别再只会用‘等于’了!西门子博图TIA Portal比较指令的7种实战用法(附S7-1200程序)
  • 快速原型对比:用快马一键生成trae solo与ide的轻量级demo
  • 广东谋根全新拖拽式网页 + 多语言 + 分离式架构:CRMEB二开开启独立站新纪元结合AI Schema加持让企业营销全系统打通,从私欲营销到大模型优化领先同行
  • 不止于脚本:从一次流片经历看VCS混合仿真环境的最佳实践与自动化
  • 机器马达异响?别慌,先教你如何通过声音辨别健康状态
  • Visdom从入门到‘玩坏’:除了画Loss曲线,你还能用它做这些意想不到的骚操作
  • 新手福音:在快马平台免配置玩转anaconda与python数据分析
  • Windows下用VS2019编译CEF官方Demo,手把手搞定离屏渲染(OSR)环境
  • 终极指南:如何在Linux系统上轻松安装和配置foo2zjs打印机驱动解决方案
  • 告别增删改查!深入剖析C# WinForm人员管理系统的5个高级技巧与优化实战
  • 为什么92%的慈善AI试点失败?——资深公益技术架构师亲授5大避坑红线与3套通过ISO/IEC 23894认证的集成框架
  • 2026年网带炉选购指南及主流品牌实测排行:浙江盐浴炉、浙江箱式炉、浙江网带炉、浙江罩式炉、浙江连续式退火炉、浙江钎焊炉选择指南 - 优质品牌商家
  • Adobe-GenP 3.0终极指南:免费解锁Adobe全家桶完整功能
  • 2026年当下,如何甄选宁波行业知名的电暖气品牌? - 2026年企业资讯
  • MATLAB新手必看:手把手教你搞定摄像头硬件支持包安装(附常见报错解决)
  • 2026钢边箱生产厂家技术解析与西南区域实力厂商盘点:成都西南钢边箱厂家/成都钢边箱厂家排名/成都钢边箱厂家推荐/选择指南 - 优质品牌商家
  • 别光看报告了!用‘玩具编译器’PL/0真正搞懂符号表、静态链与运行时栈
  • 零基础入门python数据分析,用快马生成你的第一个可视化项目
  • That’s memory decay
  • 【Veo 2光影控制终极指南】:3大未公开参数+5类场景实测数据,90%用户还不知道的HDR动态范围调优法
  • Week 2 -- Day 4:Agent 系统(上)— 工具与 ReAct
  • AI工具更新总被后知后觉?92%工程师忽略的3个信号源,今天必须校准!
  • STM32H7串口中断里调FreeRTOS API,程序直接卡死?一个中断优先级配置的坑
  • 2026年四川高价镀膜机回收品牌TOP5客观排行:成都本地高价积压物资回收公司/成都本地高价镀膜机回收公司/成都镀膜机回收/选择指南 - 优质品牌商家
  • 告别手动点点点:用Python脚本批量跑Maxwell仿真,效率提升10倍
  • Python进程池ProcessPoolExecutor从入门到精通:你的第一个高并发数据处理脚本
  • 免费AI超分辨率终极指南:3分钟让模糊视频和图片变高清
  • 从POC到生产上线仅需48小时:国有大行私有化AI工具配置模板(含Kubernetes Operator+联邦学习证书链预置方案)
  • 别再只读数据手册了!手把手教你用Arduino玩转LIS2DW12加速度传感器的6种工作模式
  • AI 客服智能体搭建与知识库