继承Thread类并重写run()方法是Java创建线程的基础方式;需定义子类、重写run()编写任务逻辑、调用start()启动线程,而非直接调用run()。

在Java中,通过继承Thread类并重写run()方法是最基础的创建线程方式之一。这种方式简单直观,适合初学者理解线程执行逻辑的本质。
继承Thread类并实现run()方法
你需要定义一个类,让它继承Thread,然后覆盖run()方法——这个方法里写的就是该线程要执行的任务代码。注意:不要直接调用run(),而应调用start(),否则只是普通方法调用,不会启动新线程。
- 定义子类:如
MyThread extends Thread - 重写
run():把要并发执行的逻辑放在这里 - 创建实例后调用
start():JVM会为其分配栈空间,并调度执行run()
完整示例代码
以下是一个打印1到5的简单线程示例:
<font color="#888"><pre class="brush:php;toolbar:false;">class MyThread extends Thread {
public void run() {
for (int i = 1; i <= 5; i++) {
System.out.println(Thread.currentThread().getName() + ": " + i);
try {
Thread.sleep(100); // 模拟耗时操作
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
}
}
}
public class Main {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start(); // 启动第一个线程
t2.start(); // 启动第二个线程
}
}
运行结果中,t1和t2的输出会交错出现,说明两个线程真正并发执行。
Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...
立即学习“Java免费学习笔记(深入)”;
注意事项与局限性
虽然这种方式容易上手,但有几点必须清楚:
-
Java不支持多继承:一旦继承了
Thread,就无法再继承其他类,灵活性受限 -
不符合面向接口编程思想:相比实现
Runnable接口,它将“任务”和“线程控制”耦合在一起 - 每个线程都独占一个Thread对象:不利于线程复用(比如在线程池中无法使用)
-
start()只能调用一次,重复调用会抛出IllegalThreadStateException
什么时候适合用这种方式?
适用于学习线程原理、编写简单演示程序,或任务逻辑与线程生命周期强绑定的小型工具类。实际项目中更推荐使用Runnable + Thread构造器,或直接使用ExecutorService。

















