CompletableFuture的demo

import java.util.Objects;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ThreadPoolExecutor;
import java.util.stream.Collectors;

public class TestFutureJoin {

  public static void main(String[] args) throws ExecutionException, InterruptedException {


    //线程池
    ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
    executor.setCorePoolSize(200);
    executor.setMaxPoolSize(200);
    executor.setQueueCapacity(200);
    executor.setThreadNamePrefix("asyncExecutor-");
    executor.setRejectedExecutionHandler(new ThreadPoolExecutor.AbortPolicy());
    executor.initialize();

    //打印执行线程
    System.out.println("task-thread:" + Thread.currentThread().getName());

    //构建数组
    List<CompletableFuture<String>> futures = new ArrayList<>();



    //count
    CompletableFuture<String> commentCountFuture = CompletableFuture
        .supplyAsync(() -> {


          System.out.println("count-logic-thread:" + Thread.currentThread().getName());

          return "123";
        }, executor);
    futures.add(commentCountFuture);

    //setCommentLikedCount
    CompletableFuture<String> commentCountFuture1 = CompletableFuture
        .supplyAsync(() -> {

          int j = 1 / 0;
          System.out.println(j);

          //模拟Http请求
          HashMap<String, Long> map = new HashMap<>();
          map.put("count1", 2222L);

          System.out.println("count-logic-thread:" + Thread.currentThread().getName());
          return "123";
        }, executor);
    futures.add(commentCountFuture1);

    //聚合
    CompletableFuture<Void> allFutureList = CompletableFuture
        .allOf(futures.toArray(new CompletableFuture[0]));


    System.out.println("\n\n\n");

    try {
      //执行
      allFutureList.join();
    } catch (Exception e) {
      e.printStackTrace();
      System.out.println("get");
    }

    List<String> result =  futures.stream().map(future -> {

      return future.join();

//      try {
//        return future.join();
//      } catch (Exception e) {
//        e.printStackTrace();
//      }
//      return null;
      
    }).filter(Objects::nonNull).collect(Collectors.toList());

    System.out.println("end");
    System.out.println(result);
  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值