java创建线程推荐实现runnable接口而非继承thread类,因前者避免单继承限制、利于资源共享;需重写run()方法、传入thread构造器并调用start()启动,不可直接调用run()。

Java 中创建和启动线程主要有两种方式:继承 Thread 类,或实现 Runnable 接口。推荐使用后者,因为它更符合面向对象设计原则(避免单继承限制),也更利于资源共享。
实现 Runnable 接口(推荐方式)
Runnable 是一个函数式接口,只定义了一个无参无返回值的 run() 方法。你需要:
- 自定义类实现 Runnable 接口,并重写 run() 方法,把要在线程中执行的逻辑写在里面;
- 创建该类的实例;
- 将该实例作为参数传给 Thread 构造器,得到一个线程对象;
- 调用线程对象的 start() 方法启动线程(不是直接调用 run()!)。
示例:
class MyTask implements Runnable {
public void run() {
System.out.println("线程正在运行:" + Thread.currentThread().getName());
}
}
// 启动方式:
MyTask task = new MyTask();
Thread t = new Thread(task, "MyWorker");
t.start(); // 正确:交给 JVM 调度执行
// t.run(); // 错误:只是普通方法调用,不会开启新线程
继承 Thread 类(简单但不推荐)
直接扩展 Thread 类,重写其 run() 方法,然后调用 start() 启动:
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
- 适合简单场景,但 Java 不支持多继承,会占用唯一的继承机会;
- 无法再继承其他业务类,复用性和扩展性差;
- 多个线程若共享同一任务逻辑,用继承方式需重复创建多个子类实例,不如 Runnable 灵活。
示例:
class MyThread extends Thread {
public void run() {
System.out.println("子线程运行:" + getName());
}
}
new MyThread().start();
启动线程的关键细节
- 必须调用 start(),不能调用 run():start() 会触发 JVM 创建新执行栈并调度线程;run() 只是普通方法,仍在当前线程同步执行;
- 一个线程对象只能调用一次 start(),重复调用抛出 IllegalThreadStateException;
- 线程启动后,JVM 自动调用其 run() 方法,无需手动干预;
- 可通过构造器或 setName() 设置线程名,便于调试和日志追踪。
Lambda 表达式简化 Runnable(Java 8+)
因为 Runnable 是函数式接口,可用 Lambda 替代匿名内部类,代码更简洁:
Thread t = new Thread(() -> {
System.out.println("Lambda 启动的线程");
}, "LambdaThread");
t.start();
这种方式适合逻辑简单、无需复用的任务,兼顾可读性与简洁性。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










