在 Java 中,有几种主要的方式来创建线程:
1. 继承 Thread
类:
通过继承 Thread
类,重写 run
方法来定义线程执行的逻辑。
class MyThread extends Thread {
public void run() {
// 线程执行的代码
}
}
// 创建并启动线程
MyThread myThread = new MyThread();
myThread.start();
2. 实现 Runnable
接口:
通过实现 Runnable
接口,将线程执行的逻辑放在 run
方法中,并创建 Thread
对象传入 Runnable
实例。
class MyRunnable implements Runnable {
public void run() {
// 线程执行的代码
}
}
// 创建并启动线程
Thread myThread = new Thread(new MyRunnable());
myThread.start();
3. 使用匿名内部类:
通过匿名内部类实现 Runnable
接口或者直接继承 Thread
类。
// 使用匿名内部类实现Runnable接口
Runnable myRunnable = new Runnable() {
public void run() {
// 线程执行的代码
}
};
// 创建并启动线程
Thread myThread = new Thread(myRunnable);
myThread.start();
4. 使用 Callable
和 FutureTask
:
Callable
接口允许线程返回结果,并且可以通过 FutureTask
包装后,通过线程池执行。
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
class MyCallable implements Callable<String> {
public String call() {
// 线程执行的代码
return "Thread result";
}
}
// 创建FutureTask,并将其传给Thread
FutureTask<String> futureTask = new FutureTask<>(new MyCallable());
Thread myThread = new Thread(futureTask);
myThread.start();
// 获取线程执行结果
String result = futureTask.get();
5. 使用 Executor
框架:
使用 Executor
框架和相关的实现类,如 ThreadPoolExecutor
、ScheduledThreadPoolExecutor
来管理线程的创建和执行。
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
ExecutorService executorService = Executors.newFixedThreadPool(5);
executorService.execute(() -> {
// 线程执行的代码
});
executorService.shutdown();
使用建议:
选择创建线程的方式取决于具体的应用场景和需求。通常情况下,推荐使用实现 Runnable
接口或使用 Executor
框架的方式,因为它们更灵活,支持线程的池化和管理。