package com.qianwen.smartman.modules.report.utils;
|
|
import cn.hutool.log.StaticLog;
|
import java.util.ArrayList;
|
import java.util.Collection;
|
import java.util.List;
|
import java.util.Objects;
|
import java.util.concurrent.ArrayBlockingQueue;
|
import java.util.concurrent.Callable;
|
import java.util.concurrent.Future;
|
import java.util.concurrent.ThreadPoolExecutor;
|
import java.util.concurrent.TimeUnit;
|
import org.springframework.scheduling.concurrent.CustomizableThreadFactory;
|
|
/* loaded from: blade-api.jar:BOOT-INF/classes/org/springblade/modules/report/utils/ThreadPoolUtil.class */
|
public class ThreadPoolUtil {
|
private static final int CORE_POOL_SIZE = 10;
|
private static final int MAX_POOL_SIZE = 20;
|
private static final int QUEUE_CAPACITY = 30;
|
private static final long KEEP_ALIVE_TIME = 1;
|
private static ThreadPoolExecutor executor;
|
|
private ThreadPoolUtil() {
|
}
|
|
public static ThreadPoolExecutor getThreadPool() {
|
if (Objects.isNull(executor)) {
|
executor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAX_POOL_SIZE, KEEP_ALIVE_TIME, TimeUnit.SECONDS, new ArrayBlockingQueue(QUEUE_CAPACITY), new CustomizableThreadFactory("p-thread-exec-"), new ThreadPoolExecutor.CallerRunsPolicy());
|
return executor;
|
}
|
return executor;
|
}
|
|
public static <T> List<T> createTaskList(List<Callable<List<T>>> tasks) {
|
List<T> result = new ArrayList<>();
|
List<Future<List<T>>> futureList = new ArrayList<>();
|
tasks.forEach(task -> {
|
futureList.add(getThreadPool().submit(task));
|
});
|
StaticLog.info("[线程池开始执行任务].[start taskSize={}]", new Object[]{Integer.valueOf(tasks.size())});
|
futureList.forEach(future -> {
|
while (true) {
|
if (future.isDone() && !future.isCancelled()) {
|
try {
|
result.addAll((Collection) future.get());
|
return;
|
} catch (Exception e) {
|
StaticLog.error("任务{}执行失败,失败信息:{}", new Object[]{future, e.getMessage()});
|
return;
|
}
|
}
|
}
|
});
|
return result;
|
}
|
}
|