如何在 java 中高效使用线程池实现并发编程?创建线程池,预先分配一组线程。将任务提交到线程池,由线程从队列中获取任务执行。线程池中的线程负责获取和执行队列中的任务,完成的任务自动从队列中删除。

如何在 Java 中高效使用线程池实现并发编程
线程池简介
线程池是一种用于管理线程的特殊数据结构。它预先分配一组线程,并根据需要从中分配线程来执行任务。这样可以避免频繁地创建和销毁线程,从而提高了性能和效率。
立即学习“Java免费学习笔记(深入)”;
Java 线程池
Java 中的线程池可以通过以下方式创建:
ExecutorService executor = Executors.newFixedThreadPool(5);
其中,newFixedThreadPool 创建了一个固定大小的线程池,其中有 5 个线程。
任务提交
可以通过以下方式将任务提交到线程池:
executor.submit(task);
其中,task 是要执行的任务。
任务执行
线程池中的线程负责从队列中获取任务并执行它们。执行完成的任务会自动从队列中删除。
实战案例
以下是一个使用线程池进行并发处理的示例:
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 创建任务列表
List<Integer> numbers = new ArrayList<>();
for (int i = 0; i < 10000; i++) {
numbers.add(i);
}
// 将任务提交到线程池
List<Future<Integer>> futures = new ArrayList<>();
for (int number : numbers) {
Future<Integer> future = executor.submit(() -> {
return number * number;
});
futures.add(future);
}
// 获取任务结果
List<Integer> results = new ArrayList<>();
for (Future<Integer> future : futures) {
try {
results.add(future.get());
} catch (Exception e) {
e.printStackTrace();
}
}
// 关闭线程池
executor.shutdown();
}
}在这个示例中,ThreadPoolExample 类:
- 创建一个有 5 个线程的线程池 (
executor)。 - 创建一个包含 10000 个数字的列表 (
numbers)。 - 将每个数字作为一个任务提交到线程池 (
executor.sumbit)。 - 获取每个任务的结果并将其添加到
results中。 - 关闭线程池。










