java中可通过继承thread类并重写run()方法创建线程,需调用start()启动(不可调用run()),每个线程对象只能start一次,否则抛illegalthreadstateexception。

Java 中可以通过继承 Thread 类并重写其 run() 方法来创建线程。这种方式简单直观,适合逻辑相对独立、与线程生命周期强绑定的场景。
继承 Thread 类的基本步骤
核心是定义一个类,让它继承 Thread,然后覆盖 run() 方法,在其中编写线程要执行的任务代码。之后创建该类的实例,并调用 start() 方法启动线程。
- 不能直接调用
run()方法 —— 那只是普通方法调用,不会开启新线程 - 必须调用
start(),JVM 才会为其分配资源并调度执行run() - 每个线程对象只能调用一次
start(),重复调用会抛出IllegalThreadStateException
一个典型示例
下面是一个打印 5 次线程名称的简单例子:
class MyThread extends Thread {
@Override
public void run() {
for (int i = 0; i // 使用方式:
public class Main {
public static void main(String[] args) {
MyThread t1 = new MyThread();
MyThread t2 = new MyThread();
t1.start(); // 启动第一个线程
t2.start(); // 启动第二个线程
}
}注意事项和局限性
继承 Thread 类虽然容易上手,但存在一些实际限制:
- Java 不支持多继承,一旦继承了
Thread,就无法再继承其他类 - 线程任务与线程对象耦合紧密,不利于复用和测试
- 通常推荐优先使用
Runnable或Callable+Thread构造器的方式,更灵活也更符合面向对象设计原则
如何给线程命名(可选增强)
可以通过构造器传入名称,或在创建对象后调用 setName():
-
new MyThread("Worker-1")—— 前提是子类提供带参构造器并调用super(name) -
t1.setName("Downloader")—— 在start()前设置即可 - 命名有助于调试和日志追踪,尤其在线程数量较多时
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南











