ThreadPoolExecutor示例
时间: 2024-09-03 09:00:41 浏览: 42
ThreadPoolExecutor是Java并发工具包java.util.concurrent中的一个重要类,它用于创建一组线程池,可以处理大量的任务并控制它们的工作负载。下面是一个简单的ThreadPoolExecutor示例:
```java
import java.util.concurrent.*;
public class ThreadPoolExample {
public static void main(String[] args) {
// 创建固定大小的线程池
int corePoolSize = 5;
int maximumPoolSize = 10;
long keepAliveTime = 60; // 线程空闲时间,超过这个时间会被终止
// 设置拒绝策略,如果所有工作线程都忙且队列已满,新任务会被丢弃
RejectedExecutionHandler handler = new ThreadPoolExecutor.AbortPolicy();
// 创建ThreadPoolExecutor实例
ThreadPoolExecutor executor = new ThreadPoolExecutor(
corePoolSize, // 核心线程数
maximumPoolSize, // 最大线程数
keepAliveTime, // 空闲线程存活时间
TimeUnit.SECONDS, // 时间单位
new LinkedBlockingQueue<>(10), // 队列容量
handler // 拒绝策略
);
// 提交任务到线程池
for (int i = 0; i < 20; i++) {
Runnable worker = new WorkerThread("" + i);
executor.execute(worker);
}
// 关闭线程池,不再接受新的任务
executor.shutdown();
// 等待所有任务完成后再关闭连接,如果有必要还可以等待一段时间
try {
if (!executor.awaitTermination(60, TimeUnit.SECONDS)) {
executor.shutdownNow(); // 强制停止剩余任务
System.out.println("Pool did not terminate");
}
} catch (InterruptedException e) {
executor.shutdownNow();
Thread.currentThread().interrupt();
}
}
}
class WorkerThread implements Runnable {
private String command;
public WorkerThread(String s) {
this.command = s;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + " is running task: " + command);
// 这里模拟耗时操作,实际应用中替换为业务逻辑
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
```
在这个例子中,我们创建了一个能处理最多10个线程的线程池,并提交了20个任务。当线程池达到最大限制或线程空闲过长时间,新任务将被`AbortPolicy`直接拒绝。
阅读全文