
ThreadPoolExecutor定义
ThreadPoolExecutor是Java标准库中的一个类,用于实现线程池。
ThreadPoolExecutor作用
ThreadPoolExecutor作用:可以创建一个固定大小的线程池,用于管理一组线程,可以重复使用这些线程来执行多个任务,以减少线程创建和销毁的开销。
ThreadPoolExecutor构造函数
ThreadPoolExecutor的构造函数可以接收四个参数:核心线程数、最大线程数、空闲线程存活时间和任务队列。
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
}
Java线程池的参数说明,如下所示:

ThreadPoolExecutor使用示例
创建了一个固定大小为5的线程池,向线程池中提交了10个任务,每个任务都会在一个独立的线程中执行。
如下所示:
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.ThreadPoolExecutor;
public class ThreadPoolExecutorExample {
public static void main(String[] args) {
// 创建一个固定大小为5的线程池
ExecutorService executor = Executors.newFixedThreadPool(5);
// 向线程池中提交10个任务
for (int i = 0; i < 10; i++) {
executor.execute(new Task(i));
}
// 关闭线程池
executor.shutdown();
}
private static class Task implements Runnable {
private int taskId;
public Task(int taskId) {
this.taskId = taskId;
}
@Override
public void run() {
System.out.println("Task #" + taskId + " is running on " + Thread.currentThread().getName());
try {
Thread.sleep(1000); // 模拟任务执行时间
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Task #" + taskId + " is completed.");
}
}
}
ThreadPoolExecutor工作原理
ThreadPoolExecutor的工作原理如下:

- 当有新的任务提交到线程池时,线程池会判断当前线程池中的线程数是否小于核心线程数,如果是则创建一个新的线程来执行该任务;如果不是,则将任务放入任务队列中等待执行。
- 当任务队列中有任务等待执行时,线程池会从任务队列中取出一个任务,交给线程池中的空闲线程来执行。
- 如果当前线程池中的线程数已经达到核心线程数,但是任务队列中的任务仍然有未执行的,那么线程池会创建新的线程来执行任务,直到线程数达到最大线程数为止。
- 当线程池中的线程数超过核心线程数时,空闲线程的存活时间会受到控制,超过指定时间的线程会被销毁,以减少资源的占用。
- 当任务执行完成后,线程会将执行结果返回给线程池,线程池将执行结果保存到一个Future对象中,供调用者获取。
以上就是ThreadPoolExecutor详解,更多线程池内容,请查看:Java线程池(万字图文详解)
mikechen睿哥
10年+一线大厂架构实战经验,就职于阿里、百度等一线大厂,操盘多个亿级大厂核心项目。