实现 Java 公用线程池的步骤
流程图:
flowchart TD
A(开始) --> B(创建线程池)
B --> C(提交任务)
C --> D(执行任务)
D --> E(完成任务)
E --> F(关闭线程池)
F --> G(结束)
甘特图:
gantt
title Java 公用线程池实现甘特图
dateFormat YYYY-MM-DD
section 创建线程池
创建线程池 :a1, 2022-01-01, 7d
section 提交任务
提交任务 :a2, after a1, 5d
section 执行任务
执行任务 :a3, after a2, 10d
section 完成任务
完成任务 :a4, after a3, 2d
section 关闭线程池
关闭线程池 :a5, after a4, 1d
代码实现步骤:
- 创建线程池
- 提交任务
- 执行任务
- 完成任务
- 关闭线程池
下面将详细介绍每一步的具体实现。
创建线程池
在 Java 中,可以使用 ExecutorService
接口及其实现类 ThreadPoolExecutor
来创建线程池。代码如下:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
// 创建线程池,使用 Executors 工具类的 newFixedThreadPool 方法创建固定大小的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
}
}
上述代码中,我们通过 Executors.newFixedThreadPool(5)
方法创建了一个固定大小为 5 的线程池。
提交任务
一旦创建了线程池,我们可以使用 execute
方法来提交任务给线程池执行。代码如下:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
// 创建线程池,使用 Executors 工具类的 newFixedThreadPool 方法创建固定大小的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 提交任务给线程池执行,使用 execute 方法
executorService.execute(new Runnable() {
@Override
public void run() {
// 任务逻辑代码
System.out.println("Task executed by thread: " + Thread.currentThread().getName());
}
});
}
}
上述代码中,我们通过 execute
方法提交了一个任务给线程池执行。任务是一个匿名内部类,实现了 Runnable
接口的 run
方法,该方法中包含了任务的逻辑代码。
执行任务
线程池会自动调度线程去执行任务。我们只需要提交任务给线程池,线程池会从线程池中选择一个空闲的线程来执行任务。代码如下:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
// 创建线程池,使用 Executors 工具类的 newFixedThreadPool 方法创建固定大小的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 提交任务给线程池执行,使用 execute 方法
executorService.execute(new Runnable() {
@Override
public void run() {
// 任务逻辑代码
System.out.println("Task executed by thread: " + Thread.currentThread().getName());
}
});
}
}
上述代码中,当我们调用 executorService.execute
方法提交任务后,线程池会自动调用一个空闲的线程执行任务。
完成任务
任务执行完成后,线程会返回线程池进行复用,我们可以通过判断任务是否完成来进行下一步操作。代码如下:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class Main {
public static void main(String[] args) {
// 创建线程池,使用 Executors 工具类的 newFixedThreadPool 方法创建固定大小的线程池
ExecutorService executorService = Executors.newFixedThreadPool(5);
// 提交任务给线程池执行,使用 execute 方法
executorService.execute(new Runnable()