hello啊,各位观众姥爷们!!!本baby今天来报道了!哈哈哈哈哈嗝
Java 中线程的创建主要有以下三种核心方式,每种方式各有适用场景和优缺点:
实现方式:
Thread
类,重写 run()
方法。start()
方法启动线程。代码示例:
class MyThread extends Thread {
@Override
public void run() {
System.out.println("使用 Thread 类创建线程");
}
}
public static void main(String[] args) {
MyThread thread = new MyThread();
thread.start();
}
特点:
实现方式:
Runnable
接口,重写 run()
方法。Thread
对象,调用 start()
方法启动线程。代码示例:
class MyRunnable implements Runnable {
@Override
public void run() {
System.out.println("使用 Runnable 接口创建线程");
}
}
public static void main(String[] args) {
Thread thread = new Thread(new MyRunnable());
thread.start();
}
特点:
实现方式:
Callable
接口,重写 call()
方法(可返回结果)。Callable
实例包装为 FutureTask
对象。FutureTask
对象传递给 Thread
对象并启动线程。代码示例:
class MyCallable implements Callable<String> {
@Override
public String call() throws Exception {
return "Callable 线程返回结果";
}
}
public static void main(String[] args) throws Exception {
FutureTask<String> futureTask = new FutureTask<>(new MyCallable());
Thread thread = new Thread(futureTask);
thread.start();
System.out.println(futureTask.get()); // 获取返回结果
}
特点:
FutureTask
获取结果,代码稍复杂。虽然严格来说线程池属于线程管理工具,但实际开发中常用其创建线程:
ExecutorService executor = Executors.newFixedThreadPool(5);
executor.submit(() -> System.out.println("线程池创建线程"));
executor.shutdown();
优势:统一管理线程生命周期,避免频繁创建/销毁线程的开销。
方式 | 优点 | 缺点 | 适用场景 |
---|---|---|---|
继承 Thread |
简单直接 | 单继承限制 | 简单任务或快速验证 |
实现 Runnable |
避免继承限制,资源共享 | 无返回值 | 多线程协同处理共享数据 |
实现 Callable |
支持返回值,异常处理 | 需配合 FutureTask 使用 |
需要结果反馈的异步任务 |
线程池 | 资源复用,高效管理 | 需学习线程池配置 | 高并发或长期运行的任务 |
建议:优先选择 Runnable
或 Callable
(面向接口编程),结合线程池提升性能。