java中继承thread类实现多线程需继承thread、重写run()方法并调用start()启动;不可直接调用run(),否则无并发效果;run()内避免抛出未捕获检查异常,应try-catch处理。

Java 中通过继承 Thread 类实现多线程,是最直观的入门方式:定义一个类继承 Thread,重写 run() 方法写任务逻辑,再调用 start() 启动线程。关键点是——必须调用 start(),不能调用 run(),否则只是普通方法调用,不会真正并发执行。
怎么写一个可运行的 Thread 子类
核心就是继承 + 重写 run():
- 新建类,
extends Thread - 在
run()方法里写你想让新线程做的事(比如打印、循环、休眠等) - 不要在
run()里抛出未捕获的检查异常(如InterruptedException),要么 try-catch,要么声明 throws(但 Thread.run() 不允许 throws,所以通常 catch 处理)
示例:
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i
<h3>如何启动并观察多线程效果</h3>
<p>创建实例后调用 <code>start()</code>,JVM 会为其分配独立执行路径:</p><div class="aritcle_card flexRow artxards">
<div class="artcardd flexRow">
<a class="aritcle_card_img" rel="nofollow" href="/xiazai/skill5703" title="deep-java-review"><img
src="https://img.php.cn/upload/skill/000/000/081/179060057413304.jpg" alt="deep-java-review" onerror="this.onerror='';this.src='/static/lhimages/moren/morentu.png'" ></a>
<div class="aritcle_card_info flexColumn">
<a rel="nofollow" href="/xiazai/skill5703" title="deep-java-review" class="overflowclass">deep-java-review</a>
<p class="overflowclass">Java项目代码review工具。分析Git变更+完整调用链路上下文,推断业务需求,进行多维度评分和分类汇总,生成完整PRD文档。包含细粒度Java代码审查清单(Null安全、异常处理、Streams、并发、equals/hashCode、资源管理、API设计、性能、MyBatis/ORM、事务边界、SQL/DD...</p>
</div>
<a rel="nofollow" href="/xiazai/skill5703" title="deep-java-review" class="aritcle_card_btn flexRow flexcenter"><b></b><span>下载</span>
</a>
</div>
</div>
-
new MyThread().start();→ 启动一个新线程,自动调用其run() - 可以多次创建不同实例并分别
start(),它们并发执行 - 默认线程名是
Thread-0、Thread-1… 可用setName("Worker-A")或构造时传参提升可读性
主程序中同时运行多个线程,输出会交错,体现并发特征:
public static void main(String[] args) {
new MyThread().setName("窗口A").start();
new MyThread().setName("窗口B").start();
System.out.println("主线程继续执行");
}
常见误区和注意事项
初学者容易踩的坑,直接影响是否真能“多线程”:
- ❌ 调用 run() 代替 start():这相当于普通方法调用,代码仍在当前线程串行执行,毫无并发意义
-
❌ 重复调用 start():同一个 Thread 实例只能 start 一次,第二次会抛
IllegalThreadStateException -
⚠️ 线程间不共享实例变量:每个
MyThread对象是独立实例,private int count = 0;在不同线程中互不影响(若需共享,请改用 Runnable + 共享对象,或加同步) - ⚠️ 主线程结束 ≠ 程序结束:只要还有非守护线程在运行(比如你 start 的子线程),JVM 就不会退出
这种方式适合什么场景?
继承 Thread 类不是“错误”,而是有明确适用边界:
- 适合逻辑极简、一次性、无复用需求的演示或脚本任务
- 适合需要直接访问
Thread特有方法(如setPriority()、isAlive())且不想封装委托的场景 - 不适合已继承其他父类的业务类(Java 单继承限制)
- 不适合需多个线程共用同一任务逻辑的场景(Runnable 更自然)
实际项目中,实现 Runnable 接口或使用 Lambda 是更主流、更灵活的选择;但理解继承 Thread 的机制,对掌握线程生命周期和底层原理非常有帮助。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










