java8多线程使用示例

使用CompletableFuture.allOf实现异步执行同步搜集结果

/**
     * @author wjq
     * @create 2022-03-12 16:19
     */
    public class TestCompleteFuture {
    
        private static final int corePoolSize = 10; // 核心线程数
        private static final int maximumPoolSize = 20; // 最大线程数
        private static final long keepAliveTime = 60; // 存活时间
        /**
         * 自定义线程池
         */
        private static final ThreadPoolExecutor executor = new ThreadPoolExecutor(corePoolSize, maximumPoolSize, keepAliveTime,
                TimeUnit.SECONDS, new ArrayBlockingQueue(100), new ThreadPoolExecutor.CallerRunsPolicy());
    
        /**
         * 使用CompletableFuture完成多任务执行示例
         * @param args
         */
        public static void main(String[] args) {
            List<String> resultList = new ArrayList<>();
            // CompletableFuture list
            List<CompletableFuture<?>> list = new ArrayList<>();
            // 第一个任务
            list.add(CompletableFuture.runAsync(() -> {
                // TODO: 具体的任务执行...
                resultList.add("第一个任务的执行结果");
            }, executor));
            // 第二个任务
            list.add(CompletableFuture.runAsync(() -> {
                // TODO: 具体的任务执行...
                resultList.add("第二个任务的执行结果");
            }, executor));
            // 第三个任务
            list.add(CompletableFuture.runAsync(() -> {
                // TODO: 具体的任务执行...
                resultList.add("第三个任务的执行结果");
            }, executor));
            // 第四个任务
            list.add(CompletableFuture.runAsync(() -> {
                // TODO: 具体的任务执行...
                resultList.add("第四个任务的执行结果");
            }, executor));
            // 待等所有任务执行完成
            CompletableFuture.allOf(list.toArray(new CompletableFuture[0])).join();
            System.out.println(resultList);
        }
    }

 

posted @ 2023-06-27 20:26  天际星痕  阅读(193)  评论(0编辑  收藏  举报