ExecutorService executor = new ThreadPoolExecutor( 8, 16, 60, TimeUnit.MINUTES, new ArrayBlockingQueue<>(100) ); Random random=new Random(10); //模拟查询用户列表 List<User> list=selectUsers();//需要执行的任务列表 // 任务列表 List<CompletableFuture<User>> fList = new ArrayList<>(); list.forEach(u->{ CompletableFuture<User> f = CompletableFuture.supplyAsync(//异步执行方法 //执行耗时较长的业务代码,这里模拟一下 ()->{ //执行完成,设置返回结果 设置 coede 和 list u.setAge(random.nextInt(100)); u.setName(UUID.randomUUID().toString()); return u; }, executor ); fList.add(f); }); // 阻塞,等待所有任务执行完成 CompletableFuture<Void> all= CompletableFuture.allOf(fList.toArray(new CompletableFuture[0])); //因为allOf没有返回值,所以需要通过thenApply回调函数获取结果 CompletableFuture<List<User>> allUser=all.thenApply(v-> fList.stream().map(a-> { try { return a.get(); } catch (InterruptedException | ExecutionException e) { e.printStackTrace(); } return null; }).collect(Collectors.toList())); // ---------------获取返回值----------------- try { list=allUser.get(); } catch (InterruptedException e) { throw new RuntimeException(e); } catch (ExecutionException e) { throw new RuntimeException(e); }
文章来源地址https://www.toymoban.com/news/detail-741019.html
文章来源:https://www.toymoban.com/news/detail-741019.html
到了这里,关于CompletableFuture 异步调用,获取返回值的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!