ThreadPoolExecutor的使用例子
时间: 2024-07-05 18:01:18 浏览: 92
ThreadPoolExecutor是Java并发包中用于管理线程池的工具,它可以执行大量计算密集型或IO密集型任务,提高程序的性能和响应能力。以下是一个简单的ThreadPoolExecutor使用示例:
```java
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建一个固定大小的线程池,最多同时执行5个任务
ThreadPoolExecutor executor = new ThreadPoolExecutor(
5, // 核心线程数
5, // 最大线程数
60L, // 空闲线程存活时间(单位为秒)
TimeUnit.SECONDS, // 时间单位
new ArrayBlockingQueue<>(10), // 定义线程队列,限制队列大小为10
new NamedThreadFactory("TaskExecutor"), // 自定义线程名称
new ThreadPoolExecutor.AbortPolicy() // 任务拒绝策略
);
// 提交5个任务到线程池
for (int i = 0; i < 10; i++) {
int taskId = i;
executor.submit(new RunnableTask(taskId));
}
// 关闭线程池,停止接受新任务
executor.shutdown();
// 等待所有任务完成后再关闭,如果还有未完成的任务,将等待它们完成
while (!executor.isTerminated()) {
}
System.out.println("All tasks finished");
}
static class RunnableTask implements Runnable {
private final int taskId;
public RunnableTask(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
try {
Thread.sleep(1000); // 模拟耗时操作
System.out.println("Task " + taskId + " executed by thread " + Thread.currentThread().getName());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
```
在这个例子中,我们创建了一个`ThreadPoolExecutor`,然后提交了多个`RunnableTask`到线程池执行。每个任务会睡眠一段时间后打印任务ID和执行线程的名称。`shutdown()`方法关闭线程池接收新的任务,`isTerminated()`用于检查是否所有任务都已完成。
阅读全文