题目
Java 创建线程有几种方法
答案
@[toc]
---
## 继承 Thread 类
通过继承 Thread 类并重写 run() 方法,创建一个线程对象,调用 start() 方法启动线程。
示例代码:
```java
class MyThread extends Thread {
@Override
public void run() {
// 线程要执行的代码
}
}
MyThread thread = new MyThread();
thread.start();
```
## 实现 Runnable 接口
通过实现 Runnable 接口并实现 run() 方法,创建一个 Runnable 对象,将该对象作为参数传入 Thread 的构造方法中,创建一个线程对象,调用 start() 方法启动线程。
示例代码:
```java
class MyRunnable implements Runnable {
@Override
public void run() {
// 线程要执行的代码
}
}
MyRunnable runnable = new MyRunnable();
Thread thread = new Thread(runnable);
thread.start();
```
## 实现 Callable 接口
通过实现 Callable 接口并实现 call() 方法,创建一个 Callable 对象,将该对象作为参数传入 FutureTask 的构造方法中,创建一个 FutureTask 对象,将 FutureTask 对象作为参数传入 Thread 的构造方法中,创建一个线程对象,调用 start() 方法启动线程。可以使用 FutureTask.get() 方法获取 call() 方法的返回值。
示例代码:
```java
class MyCallable implements Callable<Integer> {
@Override
public Integer call() throws Exception {
// 线程要执行的代码
return 1;
}
}
MyCallable callable = new MyCallable();
FutureTask<Integer> futureTask = new FutureTask<>(callable);
Thread thread = new Thread(futureTask);
thread.start();
int result = futureTask.get();
```
## 使用 Executor 框架
通过 Executor 框架的工具类 Executors 来创建线程池,将任务提交给线程池执行。
示例代码:
```java
ExecutorService executorService = Executors.newFixedThreadPool(5);
executorService.execute(new Runnable() {
@Override
public void run() {
// 线程要执行的代码
}
});
executorService.shutdown();
```
## 使用线程池框架 Fork/Join
通过 Fork/Join 框架的工具类 ForkJoinPool 来创建线程池,将任务提交给线程池执行。
示例代码:
```java
ForkJoinPool forkJoinPool = new ForkJoinPool();
forkJoinPool.execute(new Runnable() {
@Override
public void run() {
// 线程要执行的代码
}
});
forkJoinPool.shutdown();
```
