@Bean
public ThreadPoolExecutor threadPoolExecutor() {
ThreadFactory threadFactory = new ThreadFactory() {
private int count = 1;
@Override
public Thread newThread(@NotNull Runnable r) {
Thread thread = new Thread(r);
thread.setName("线程" + count++);
return thread;
}
};
return new ThreadPoolExecutor(2, 4, 30, TimeUnit.SECONDS, new ArrayBlockingQueue<>(4), threadFactory);
}
- corePoolSize 核心线程数 当前线程数小于核心线程数时,来了一个任务如果没有线程处理,就会创建一个线程去处理
- maximumPoolSize 最大线程数,当前线程数大于等于核心线程数,小于最大线程数时,来了一个任务没线程处理会先放入阻塞队列中,并不会立即创建线程进行处理,只有当阻塞队列任务满时,才会去创建线程进行处理
- 当前线程数大于最大线程数,并且阻塞队列也已经满时,此时再来一个任务会直接报错 RejectedExecutionException
- keepAliveTime 当前线程数大于核心线程数时,多余的线程最多闲置的时间,超过这个时间还没有任务处理会进行销毁线程
- BlockingQueue 阻塞队列
- ThreadFactory 可以对线程池创建的线程进行一些处理 比如定义线程的名字
- 当队列已满时,此时再来一个任务会直接执行这个任务而不是取队列中的任务进行处理
@Resource
private ThreadPoolExecutor threadPoolExecutor;
public void addTask() {
CompletableFuture.runAsync(new Runnable() {
@Override
public void run() {
}
}, threadPoolExecutor);
}