Java多线程怎么创建
在 Java 中,多线程的创建方式主要有以下几种(从常见到不常见):
一、继承 Thread 类(不推荐)
class MyThread extends Thread {
@Override
public void run() {
System.out.println("线程执行:" + Thread.currentThread().getName());
}
}
public class Test {
public static void main(String[] args) {
MyThread t = new MyThread();
t.start(); // 启动线程
}
}
✅ 简单
❌ 不能继承其他类(Java 单继承)
二、实现 Runnable 接口(推荐 ✅)
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("线程执行:" + Thread.currentThread().getName());
}
}
public class Test {
public static void main(String[] args) {
Thread t = new Thread(new MyRunnable());
t.start();
}
}
✅ 解耦任务与线程
✅ 可继承其他类
✅ 最常用
三、实现 Callable + FutureTask(有返回值 ✅)
import java.util.concurrent.*;
class MyCallable implements Callable {
@Override
public String call() throws Exception {
return "线程返回结果";
}
}
public class Test {
public static void main(String[] args) throws Exception {
FutureTask task = new FutureTask<>(new MyCallable());
new Thread(task).start();
System.out.println(task.get()); // 获取返回值
}
}
✅ 可返回结果
✅ 可抛出异常
❌ 写法稍复杂
四、使用线程池(企业开发必用 ✅✅✅)
import java.util.concurrent.*;
public class Test {
public static void main(String[] args) {
ExecutorService pool = Executors.newFixedThreadPool(3);
pool.execute(() -> {
System.out.println("线程池执行");
});
pool.shutdown();
}
}
✅ 性能高
✅ 控制线程数量
✅ 实际项目首选
五、Lambda 表达式(Java 8+ ✅)
new Thread(() -> {
System.out.println("Lambda 线程");
}).start();
✅ 简洁
✅ 常用于 Runnable
六、对比总结
| 方式 | 是否有返回值 | 是否推荐 |
|---|---|---|
| Thread | ❌ | ❌ |
| Runnable | ❌ | ✅ |
| Callable | ✅ | ✅ |
| 线程池 | ✅ | ✅✅✅ |
如果你愿意,我可以继续讲:
- 线程生命周期
- synchronized / Lock
- 线程池参数详解
- 多线程面试题
你想深入哪一块?