如何使用多线程,并且能够等待线程执行完之后再走主线程

1.配置一个全局线程池----等待主线程去使用
/**

  • 全局线程池配置

  • @author
    */
    @Configuration
    public class ThreadPoolConfig {

    /**

    • 用于初始化租户信息
    • @return
      */
      @Bean
      public ExecutorService InitTenantThreadPool(){
      ThreadFactory namedThreadFactory = new ThreadFactoryBuilder().setNamePrefix(“init_tenant-%d”).build();
      return new ThreadPoolExecutor(
      5,
      10,
      10L, TimeUnit.SECONDS,
      new LinkedBlockingQueue<>(512),
      namedThreadFactory,
      new ThreadPoolExecutor.CallerRunsPolicy());
      }
      }

2.借用CompletableFuture去实现线程并行,并等待线程执行完成
List<List> result = getTruncateStringList(0, unitIdList,new ArrayList<>());
List<CompletableFuture> tasks = new ArrayList<>();
result.forEach(re->{
tasks.add(CompletableFuture.runAsync(() -> organizationVOListForSS.addAll(organizationDao.findByIdList(re)),
threadPoolConfig.InitTenantThreadPool4()));
});
// 等待所有线程执行完成
CompletableFuture.allOf(tasks.toArray(new CompletableFuture[0])).join();

3.附上allOf的源代码和join方法的源代码 ------自己看吧

public T join() {
Object r;
if ((r = result) == null)
r = waitingGet(false);
return (T) reportJoin®;
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值