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

📅 2026/6/25 15:51:03
使用 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 接口继承规则单继承无法再继承其他类接口多实现无继承限制资源共享不支持每个对象独立资源支持多线程共用同一个任务耦合度高线程与业务逻辑绑定低任务与线程调度分离适用场景简单独立线程无需共享资源多线程并发、资源共享、线程池开发扩展性差受单继承约束优秀推荐企业开发使用