继承Thread类创建多线程程序需三步:1.自定义类继承Thread;2.重写run()方法编写并发逻辑;3.创建实例并调用start()启动线程,不可直接调用run()。

用继承 Thread 类的方式写第一个 Java 多线程程序,核心就一点:自定义一个类,让它继承 Thread,重写 run() 方法,在里面放你想让线程执行的代码,然后调用 start() 启动它。
1. 创建继承 Thread 的子类
新建一个类(比如叫 MyThread),用 extends Thread 声明继承关系。这是最直接的多线程起点,不需要实现接口或传入 Runnable 对象。
注意:不要在子类里直接调用 run() —— 那只是普通方法调用,不会开启新线程;必须调用 start(),JVM 才会真正分配线程资源并自动调用 run()。
2. 重写 run() 方法
run() 是线程的入口方法,就像 main() 是程序入口一样。所有要并发执行的逻辑都写在这里。例如:
立即学习“Java免费学习笔记(深入)”;
你接手一个需求时,是不是经常这样:"改一个小字段 → 结果把不相关的代码也改了"、"需求说得很模糊 → 做着做着发现跑偏了"、"数据库加个字段 → 上线才发现漏了数据兼容"、"做了个新功能 → 一个月后自己都忘了当时怎么设计的"、"写到一半被中断 → 再回来不知道从哪继续";这个 Skill 就是专门解决这些问题的。 它会自动探测你的项目环境(JDK、Spring Boot、ORM、数据库、前端框架),记在
- 打印 5 次带线程名的消息
- 做简单计算、模拟耗时操作(如 sleep)
- 避免在 run() 中抛出未检查异常导致线程静默终止(可加 try-catch)
3. 创建实例并启动线程
在 main 方法中创建你写的 Thread 子类对象,再调用 start()。可以创建多个实例,它们会并发运行(具体调度由 JVM 和操作系统决定)。
示例关键代码片段:
class MyThread extends Thread {
public void run() {
for (int i = 0; i < 5; i++) {
System.out.println(getName() + ": " + i);
try { Thread.sleep(100); } catch (InterruptedException e) { }
}
}
}
public class Main {
public static void main(String[] args) {
new MyThread().start(); // 线程1
new MyThread().start(); // 线程2
}
}
运行后你会看到两组输出交错出现(如 Thread-0: 0、Thread-1: 0、Thread-0: 1…),这就是并发执行的直观体现。
4. 注意线程命名与调试
默认线程名是 Thread-0、Thread-1… 不易区分。可以用 setName("xxx") 或构造时传入名称(new MyThread("Worker-A"))来提高可读性,方便排查问题。
另外,主线程(main)和子线程是独立的:main 方法执行完,程序不一定结束——只要还有非守护线程在运行,JVM 就继续存活。

















