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

Java作业:创建线程的两种方式对比(Thread子类 vs Runnable接口)

一、作业目标

  1. 掌握 Java 中创建线程的两种方式:继承Thread类、实现Runnable接口。

  2. 理解两者的区别及适用场景。

二、两种方式介绍

Java 中实现多线程主要有两种方法:

方式描述
继承 Thread 类自定义类继承java.lang.Thread,重写run()方法,然后创建子类对象并调用start()
实现 Runnable 接口自定义类实现java.lang.Runnable接口,实现run()方法,再将其作为参数传给Thread对象,最后调用start()

三、代码示例对比

方式一:继承 Thread 类

// 1. 继承 Thread 类 class MyThread extends Thread { @Override public void run() { for (int i = 1; i <= 5; i++) { System.out.println(Thread.currentThread().getName() + " - 数字:" + i); } } } // 测试 public class ThreadDemo { public static void main(String[] args) { MyThread t1 = new MyThread(); MyThread t2 = new MyThread(); t1.start(); t2.start(); } }

方式二:实现 Runnable 接口

// 2. 实现 Runnable 接口 class MyRunnable implements Runnable { @Override public void run() { for (int i = 1; i <= 5; i++) { System.out.println(Thread.currentThread().getName() + " - 数字:" + i); } } } // 测试 public class RunnableDemo { public static void main(String[] args) { Thread t1 = new Thread(new MyRunnable()); Thread t2 = new Thread(new MyRunnable()); t1.start(); t2.start(); } }

四、主要区别(重点)

对比维度继承 Thread 类实现 Runnable 接口
资源限制Java 单继承,继承 Thread 后不能再继承其他类还可以继承其他类,更灵活
代码共享多个线程需要操作同一份资源时较麻烦(需用静态变量)天然适合多个线程共享同一个 Runnable 对象(同一份数据)
线程与任务分离线程和任务耦合在一起线程和任务分离,Runnable 代表任务,Thread 代表执行者
使用场景简单、不需要继承其他类时推荐方式,尤其需要共享资源或已继承其他类时
面向对象设计不符合“组合优于继承”原则更符合面向接口编程

重点示例:共享资源情况

// 使用 Runnable 实现多线程卖票(共享 100 张票) class TicketRunnable implements Runnable { private int tickets = 100; @Override public void run() { while (tickets > 0) { System.out.println(Thread.currentThread().getName() + " 卖出一张,剩余:" + --tickets); } } } // 只需一个 Runnable 实例,传给多个 Thread 即可 TicketRunnable task = new TicketRunnable(); new Thread(task).start(); new Thread(task).start();

如果使用继承 Thread 类实现同样的共享卖票,需要将 tickets 设为静态变量,不够优雅。

五、常见误区

  • ❌ 直接调用run()方法:不会启动新线程,只是在当前线程中执行普通方法。

  • ✅ 正确启动线程:调用start()方法。

  • 两种方式最终都是通过Thread类来启动线程,Runnable 只是提供了run()方法的实现。

六、小结

推荐选择原因
优先使用 Runnable 接口1. 避免单继承限制
2. 更适合资源共享
3. 代码与线程解耦,易维护
继承 Thread 类的适用场景非常简单的场景,且不需要继承其他类时(比如小练习)

在实际开发中,Runnable+Thread是更主流的写法。Java 8 之后,甚至可以直接用 Lambda 表达式简化:new Thread(() -> { ... }).start();

通过本次对比,我明白了为什么接口方式更受推荐,也加深了对线程概念的理解。

http://www.jsqmd.com/news/1000718/

相关文章:

  • 2026年武汉手表回收市场现状解析及服务机构综合梳理 - 奢品屋武汉奢侈品回收
  • 制造型企业数据整合:图纸、BOM、订单的AI集成方案
  • 北京西服推荐 - 中媒介
  • AhMyth Android RAT实战指南:从架构解析到渗透测试应用
  • 微信聊天记录导出终极指南:简单三步永久备份你的数字记忆
  • 北京夹克定制哪家好 - 中媒介
  • 2026包装机行业标杆齐聚!超声波/阀口/干粉砂浆全品类领跑者揭秘 - 信息热点
  • MOOTDX:Python通达信数据接口终极指南,5分钟解决量化投资数据难题
  • 2026扬州黄金回收哪家靠谱?本地人实测正规门店避坑攻略 - 信息热点
  • 南京复读学校排名,提分实力派汇总 - 信息热点
  • 别再只看跑分了!聊聊那些真正影响你NVMe SSD游戏加载和文件拷贝速度的隐藏因素
  • 异构双核MCU+DSP架构解析:以DSP56654为例的设计与编程实战
  • AB Download Manager:重新定义高效下载管理的终极解决方案
  • (一)YModbus开篇:为什么工控调试离不开 Modbus?
  • CRP (174-185) ;IYLGGPFSPNVL
  • 北京性价比高的西装店 - 中媒介
  • AI Agent 在自动化测试中的落地实践:从“脚本执行”到“智能测试工程师”
  • 2026杭州抖音代运营公司榜单:极具实力的金牌服务商深度测评 - 信息热点
  • 如何为Windows任务栏监控工具TrafficMonitor开发插件:从零到一实战指南
  • 从物理波的叠加到数学公式:用Desmos动态演示帮你直观理解sin(α+β)
  • 金盐回收哪家公司价格高?纯度标定与损耗率的计算逻辑 - 品牌2026
  • (二)Modbus协议入门:工控调试先把这几个概念搞明白
  • 建筑施工特种作业证要不要考? 得才教育帮你理清决策思路(2026版) - 信息热点
  • 别再只盯着CPU了!聊聊SOC里那个默默守护内存的‘医生’:MBIST与BISR
  • 别踩2026年录音生成会议纪要工具选型坑 过来人实测整理各类工具成本对比经验
  • (三)YModbus上手:先把寄存器读出来
  • 2026成都菁英单招集训重磅开启!专属惊喜福利+官方直通联系方式 - 成都单招培训
  • OpenPLC:开源工业控制器的革命性选择
  • 昆明名表回收深度测评(2026)|黄金波动下,劳力士欧米茄变现谁更稳 - 奢侈品回收评测
  • 2026广州发明专利申请机构测评|核心技术/材料配方/软件算法专利精细化撰写、实质审查答辩、高授权率辅导服务商推荐TOP3 - 信息热点