CompletableFuture的使用
阅读原文时间:2023年07月08日阅读:1

1 List> subList = CommonUtils.splitList(pendingIds, 500);

private static final ThreadFactory NAMED_THREAD_FACTORY =

2 new ThreadFactoryBuilder().setNameFormat("syncContractLine-pool-%d").build(); 3 ThreadPoolExecutor threadPool = new ThreadPoolExecutor(10, 20, 500, TimeUnit.MILLISECONDS, 4 new LinkedBlockingQueue<>(500), NAMED_THREAD_FACTORY, new ThreadPoolExecutor.AbortPolicy()); 5 IRequestContext current = RequestContextManager.getCurrent(); 6 List> futureList = new ArrayList<>(); 7 for (List subPendingIds : subList) { 8 CompletableFuture future = CompletableFuture.runAsync(() -> { 9 RequestContextManager.setCurrent(current); 10 LOGGER.info("handle contractLines start"); 11 if (CommonUtils.isNotEmpty(subPendingIds)) { 12 for (String id : subPendingIds) { 13 map.put("contract", id); 14 iContractHeaderInfoService.syncContractLineInfo(map); 15 } 16 } 17 LOGGER.info("handle contractLines end"); 18 }, threadPool); 19 futureList.add(future); 20 } 21 CompletableFuture.allOf(futureList.toArray(new CompletableFuture[futureList.size()])).join(); 22 threadPool.shutdown();