Java中通过继承Thread类实现多线程,需定义子类、重写run()方法、调用start()启动线程;run()由JVM自动调用,直接调用run()仅是普通方法执行;示例包括数数和打印字母。

Java 中通过继承 Thread 类实现多线程,本质是创建 Thread 的子类并重写其 run() 方法,在其中编写需要并发执行的逻辑,再调用 start() 启动线程。
继承 Thread 类的基本步骤
要让一个类具备线程能力,需满足三个关键动作:
- 定义一个类,继承
Thread(不能同时继承其他类,因 Java 不支持多继承) -
重写
run()方法:把要并发执行的代码写在里面,不是直接调用它,而是由 JVM 在线程启动后自动调用 -
创建该类实例,并调用
start():这才是真正开启新线程;若误调run(),只是普通方法调用,仍在主线程中顺序执行
一个典型示例
比如模拟两个任务:数数到 5 和打印字母 A–E:
(注意:实际开发中更推荐使用 Runnable + 线程池,但理解继承方式有助于掌握线程本质)class CountThread extends Thread {
private String name;
CountThread(String name) { this.name = name; }
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println(name + ": " + i);
try { Thread.sleep(100); } catch (InterruptedException e) { }
}
}
}
class LetterThread extends Thread {
public void run() {
for (char c = 'A'; c <= 'E'; c++) {
System.out.println("Letter: " + c);
try { Thread.sleep(150); } catch (InterruptedException e) { }
}
}
}
// 启动
public class Main {
public static void main(String[] args) {
new CountThread("Counter").start(); // 新线程运行
new LetterThread().start(); // 另一个新线程运行
// 主线程继续往下走,不等待
}
}
需要注意的关键点
继承方式虽直观,但有明显局限,使用时务必留意:
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
-
无法继承其他父类:Java 单继承限制,若业务类已继承某个类(如
Frame、Activity),就无法再继承Thread -
线程对象与任务强耦合:每个线程类只能干一种事,复用性差;而
Runnable可被多个线程共享,更灵活 -
不便于线程统一管理:每次
new Thread().start()都新建线程,容易造成资源浪费;生产环境应优先使用ExecutorService -
获取线程返回值困难:
Thread的run()返回 void,若需结果,得靠外部变量或回调,不如Callable直观
什么时候可以考虑继承 Thread
适合教学演示、简单脚本、或明确只需“一个类即一个线程”且无继承冲突的轻量场景。例如:
- 嵌入式小工具中启动一个后台心跳线程
- 测试环境中快速验证线程调度行为
- 框架内部封装(如某些老版本 GUI 工具类)
日常开发中,建议以 Runnable 或 Callable 为主,配合线程池使用,更健壮、可维护、易扩展。

















