Java中创建多线程需继承Thread类并重写run()方法,再调用start()启动;直接调用run()不开启新线程;run()不可抛受检异常,避免死循环;start()仅可调用一次;可设名称、优先级和守护线程。

Java 中使用 Thread 类创建并启动多线程,核心是继承 Thread 类、重写 run() 方法,再调用 start() 启动线程。注意不能直接调用 run(),否则只是普通方法执行,不会开启新线程。
继承 Thread 类并重写 run() 方法
定义一个类继承 java.lang.Thread,然后覆盖 run() 方法,在其中编写线程要执行的逻辑:
-
run()是线程真正执行的任务入口,类似主线程的main() - 不要在
run()中抛出受检异常(如IOException),因为父类方法签名不声明异常;如需处理,应使用 try-catch - 避免在
run()中写死循环且无退出条件,否则线程可能无法结束
调用 start() 启动线程
创建子类实例后,必须调用 start() 方法,JVM 才会为其分配栈空间、调度执行:
-
start()内部触发 JVM 启动新线程,并自动调用该线程的run()方法 - 重复调用
start()会抛出IllegalThreadStateException - 同一个
Thread实例只能启动一次;如需多次运行,应新建实例
设置线程名称和优先级(可选)
便于调试和资源调度,可在启动前设置:
立即学习“Java免费学习笔记(深入)”;
- 通过构造函数或
setName(String)指定名称,例如new MyThread("Worker-1") - 用
setPriority(int)设置优先级(范围 1–10,默认为 5),但实际调度仍由操作系统决定,不保证严格生效 - 也可调用
setDaemon(true)将其设为守护线程(如日志监控),JVM 退出时会自动终止所有守护线程
完整示例代码
以下是一个简单但完整的例子:
class CounterThread extends Thread {
private int count = 0;
public CounterThread(String name) {
super(name);
}
@Override
public void run() {
for (int i = 0; i < 3; i++) {
System.out.println(getName() + ": " + i);
try {
Thread.sleep(500); // 模拟耗时操作
} catch (InterruptedException e) {
Thread.currentThread().interrupt(); // 恢复中断状态
return;
}
}
}
}
// 使用方式:
public class Main {
public static void main(String[] args) {
CounterThread t1 = new CounterThread("A");
CounterThread t2 = new CounterThread("B");
t1.start();
t2.start();
}
}
输出顺序不固定,体现多线程并发特性。注意捕获 InterruptedException 并恢复中断状态是良好实践。


















