知道任务个数,你可以定义好线程数规则,生成线程数去跑 代码说明: 1.虚拟线程池: 使用 Executors.newVirtualThreadPerTaskExecutor() 创建虚拟线程池,每个任务将分配一个虚拟线程来执行。 2.提交任
知道任务个数,你可以定义好线程数规则,生成线程数去跑 代码说明: 1.虚拟线程池: 使用 Executors.newVirtualThreadPerTaskExecutor() 创建虚拟线程池,每个任务将分配一个虚拟线程来执行。 2.提交任务并返回结果:
3.等待所有任务完成: 使用 CompletableFuture.allOf(futures.toArray(new CompletableFuture[0])) 等待所有的 CompletableFuture 完成。allOf.join() 会阻塞当前线程,直到所有任务完成。 4.收集结果:
5.关闭虚拟线程池: 最后,通过 executorService.shutdown() 关闭线程池,释放资源。
Java 不确定线程数,要异步多线程执行,还要等待所有线程执行结束,然后获取结果合并 解释: 任务列表 (tasks):我们创建了一个 List<Callable> 来保存所有要执行的异步任务,每个任务返回一个 Integer 结果。 创建线程池:使用 Executors.newFixedThreadPool(5) 创建了一个大小为 5 的线程池,可以并发执行 5 个线程。线程池的大小可以根据实际需要动态调整。 提交任务并获取 Future 列表:executorService.invokeAll(tasks) 方法会提交所有任务,并返回一个 List<Future>。每个 Future 对象代表一个异步任务的结果。 等待任务完成并合并结果:通过 future.get() 方法阻塞当前线程,直到任务完成并返回结果。我们在 sum 中累加所有任务的结果。 关闭线程池:最后,使用 executorService.shutdown() 关闭线程池,确保所有线程在任务完成后能够被正确回收。 重要事项:
实际案例 多线程调API然后合并API的结果返回给前端 1.声明任务队列集合
2.将任务加入然后加入任务队列
3.提交任务去执行,获取所有任务的结果,合并结果
|
2021-06-05
2021-05-27
2021-05-26
2021-06-05
2021-05-16