news 2026/6/10 19:57:19

继承 Thread 类 vs 实现 Runnable 接口创建线程区别

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
继承 Thread 类 vs 实现 Runnable 接口创建线程区别

一、两种方式代码实现演示
方式 1:继承 Thread 类(extends Thread)

//1.自定义类继承Thread,重写run() class MyThread extends Thread{ @Override public void run() { //线程执行任务 for(int i=0;i<5;i++){ System.out.println(Thread.currentThread().getName()+":"+i); } } } //测试 public class ThreadTest{ public static void main(String[] args) { MyThread t1 = new MyThread(); MyThread t2 = new MyThread(); t1.start();//开启新线程 t2.start(); } }

方式 2:实现 Runnable 接口(implements Runnable)

//1.任务类实现Runnable,重写run() class MyRunnable implements Runnable{ @Override public void run() { for(int i=0;i<5;i++){ System.out.println(Thread.currentThread().getName()+":"+i); } } } //测试 public class RunnableTest{ public static void main(String[] args) { MyRunnable task = new MyRunnable();//同一个任务对象 Thread t1 = new Thread(task,"线程A"); Thread t2 = new Thread(task,"线程B"); t1.start(); t2.start(); } }

二、核心区别对比

对比维度继承 Thread 类实现 Runnable 接口
继承限制Java 单继承,继承 Thread 后不能再继承其他父类,扩展性差实现接口,还可以继承别的类、实现多个接口,规避单继承局限
资源共享每个线程都是独立对象,无法共用任务数据同一个 Runnable 实例可传入多个 Thread,多线程共享任务资源(适合卖票、计数场景)
任务与线程耦合任务代码绑定在线程类中,线程和任务耦合在一起任务和线程分离:Runnable 存业务任务,Thread 只做线程调度,解耦设计
代码复用复用性差,任务和线程绑定任务可复用,被多个线程、线程池调用

三、关键场景举例:多线程共享资源(卖票案例)
1. 继承 Thread:无法共享票数(每个对象独立数据)

class TicketThread extends Thread{ private int ticket=10;//每个实例独立10张票 @Override public void run(){ while(ticket>0){ System.out.println(Thread.getName()+"出票:"+ticket--); } } } //三个线程各自10张票,总共卖出30张,不符合需求 new TicketThread().start(); new TicketThread().start(); new TicketThread().start();

2. 实现 Runnable:共享同一份票数(正确卖票)

class TicketRun implements Runnable{ private int ticket=10;//唯一实例,多线程共享 @Override public void run(){ while(ticket>0){ System.out.println(Thread.currentThread().getName()+"出票:"+ticket--); } } } //同一个任务对象,3个线程争抢10张票 TicketRun task = new TicketRun(); new Thread(task,"窗口1").start(); new Thread(task,"窗口2").start(); new Thread(task,"窗口3").start();

四、选择
1、优先选择:实现 Runnable 接口
规避 Java 单继承限制,面向接口编程;
天然支持多线程共享数据,适配线程池、任务调度;
任务与线程解耦,符合单一职责。
2、仅简单场景使用:继承 Thread
线程任务简单、不需要共享资源、无需拓展继承时,代码书写快捷。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/10 19:57:18

灰度世界算法:自动白平衡的经典实现

灰度世界算法是计算机视觉和数字图像处理领域中最经典且最基础的白平衡算法&#xff08;Auto White Balance, AWB&#xff09;。其主要功能是修正由于光照色温差异造成的图像色彩偏差&#xff08;例如室内黄光导致的偏黄或阴天环境下的偏蓝现象&#xff09;&#xff0c;使图像色…

作者头像 李华
网站建设 2026/6/10 19:42:16

Kubernetes 集群扩容与 Flannel 故障排除记录

. 背景在一个单 Master 节点的 Kubernetes 集群基础上&#xff0c;计划添加一个新的 Worker 节点&#xff08;名为 database&#xff09;以进行扩容。 . 初始问题&#xff1a;节点加入失败 .问题1在 database 节点上执行 kubeadm join 命令后&#xff0c;节点能够短暂连接到集群…

作者头像 李华
网站建设 2026/6/10 19:31:02

S32K3内存错误处理全解析:从ERM报告到FCCU收集的完整链路

S32K3内存错误处理全解析&#xff1a;从ERM报告到FCCU收集的完整链路在汽车电子系统的开发中&#xff0c;内存可靠性直接关系到功能安全等级的实现。当S32K3微控制器的Memory发生ECC错误时&#xff0c;错误信息会通过ERM&#xff08;Error Reporting Module&#xff09;的20个通…

作者头像 李华
网站建设 2026/6/10 19:16:01

模板驱动文档自动化:让重复文档生产变成零代码填空

1. 项目概述&#xff1a;用模板把文档生产变成“填空题”你有没有过这种体验&#xff1a;每周要交三份客户方案&#xff0c;每份结构雷同——封面、目录、痛点分析、解决方案、报价页、服务承诺——但每次都要从零新建Word、手动调格式、复制粘贴旧内容、反复检查页眉页脚是否错…

作者头像 李华