ThreadPoolExecutor具体使用案例
时间: 2023-10-17 14:13:03 浏览: 47
ThreadPoolExecutor是Java中的一个线程池实现,可以用来管理和复用线程以减少线程创建和销毁的开销,提高程序性能。以下是ThreadPoolExecutor的一个使用案例:
```java
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
public class ThreadPoolExecutorExample {
public static void main(String[] args) throws InterruptedException {
// 创建线程池,指定核心线程数和最大线程数
ExecutorService executor = Executors.newFixedThreadPool(2);
// 提交任务到线程池
for (int i = 0; i < 5; i++) {
executor.submit(new Task(i));
}
// 关闭线程池
executor.shutdown();
// 等待线程池中的任务执行完成
executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS);
System.out.println("所有任务执行完成");
}
static class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("任务 " + taskId + " 开始执行,线程名为 " + Thread.currentThread().getName());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("任务 " + taskId + " 执行完成,线程名为 " + Thread.currentThread().getName());
}
}
}
```
该案例中,创建了一个固定线程数为2的线程池,并提交了5个任务到线程池中执行。每个任务会打印出开始执行和执行完成的信息,并在执行过程中暂停1秒模拟耗时操作。最后等待线程池中的任务全部执行完成,并打印出所有任务执行完成的信息。
输出结果为:
```
任务 0 开始执行,线程名为 pool-1-thread-1
任务 1 开始执行,线程名为 pool-1-thread-2
任务 2 开始执行,线程名为 pool-1-thread-1
任务 3 开始执行,线程名为 pool-1-thread-2
任务 4 开始执行,线程名为 pool-1-thread-1
任务 0 执行完成,线程名为 pool-1-thread-1
任务 2 执行完成,线程名为 pool-1-thread-1
任务 1 执行完成,线程名为 pool-1-thread-2
任务 3 执行完成,线程名为 pool-1-thread-2
任务 4 执行完成,线程名为 pool-1-thread-1
所有任务执行完成
```