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

发布时间:2026/7/2 1:41:35
使用Thead子类创建线程vs使用Thread直接创建线程(Runnable接口)的区别? Java 两种创建线程方式区别继承 Thread 类 vs 实现 Runnable 接口 一、两种方式代码示例 1. 继承 Thread 类创建线程 class MyThread extends Thread { Override public void run () { // 线程业务逻辑 } } // 启动线程 new MyThread ().start (); 说明自定义类继承 Thread重写 run () 存放任务类本身就是线程对象。 2. 实现 Runnable 接口创建线程 class MyTask implements Runnable { Override public void run () { // 线程业务逻辑 } } // 启动线程 Runnable task new MyTask (); new Thread (task).start (); 说明Runnable 仅封装任务Thread 作为线程载体承载任务运行。 二、核心区别 继承限制 继承 ThreadJava 单继承子类无法再继承其他父类拓展受限。 实现 Runnable仅实现接口不占用继承名额可自由继承其他类拓展性强。 资源共享 继承 Thread多个线程需创建多个子类对象成员变量相互隔离无法共享数据。 实现 Runnable同一个 Runnable 实例可传入多个 Thread 对象多线程共用同一份成员数据适合并发抢资源场景。 代码耦合 继承 Thread线程对象与业务任务耦合在同一个类职责混杂。 实现 Runnable任务逻辑与线程控制解耦分工清晰便于维护。 复用性 继承 Thread任务逻辑绑定线程类复用性差。 实现 Runnable独立任务对象可复用在线程、线程池、定时任务等场景。 获取当前线程 继承 Thread线程内直接使用 this 代表当前线程。 实现 Runnable需通过 Thread.currentThread () 获取当前线程。 三、各自优缺点 继承 Thread 类 优点代码书写简洁直接创建对象调用 start ()使用便捷。 缺点受单继承约束不支持多线程共享资源耦合度高复用差。 实现 Runnable 接口 优点规避单继承限制支持多线程共享数据解耦易维护兼容线程池等并发工具是开发主流。 缺点代码多一层 Thread 包装书写略繁琐。 四、开发选择建议 日常业务开发优先选择实现 Runnable 接口仅简单测试、无继承需求、无需共享数据的极简场景可使用继承 Thread 类。