yangys
2024-03-29 e7aaa62a5c499747275a78ed6157024f15b9ab1e
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
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;
    }
}