生产环境的项目中java是如何定义,如何使用,如何关闭线程池的
生产环境的项目中java是如何定义,如何使用,如何关闭线程池的
文章目录
- 生产环境的项目中java是如何定义,如何使用,如何关闭线程池的
- 1. 定义线程池
- 1.1 直接使用 JDK 原生 `ThreadPoolExecutor`
- 1.2 在 Spring Boot 中定义
- 2. 使用线程池
- 3. 关闭线程池
- 3.1 优雅关闭
- 3.2 强制关闭
- 1. `shutdown()`
- 2. `shutdownNow()`
- 3. 何时使用
- 4. 典型注意点
- 5. 小结
- 4.小结
- 5. `CompletableFuture` 如何搭配`线程池`进行使用
- 5.1 方式一:
- 1. 基本用法:`supplyAsync`/`runAsync` + 自定义 Executor
- 2. 链式调用:`thenApplyAsync`、`thenAcceptAsync`、`handleAsync`…
- 3. 并行合并:`allOf` / `anyOf`
- 4. 与 Spring `@Async` + `CompletableFuture`
- 5. 优雅关闭线程池
- 6. 小结
- 5.2 方式二:
- 1. 基础用法:`supplyAsync` 与自定义线程池
- 2. 并行多任务合并:`allOf` / `anyOf`
- 3. 异常处理
- 4. 结合 Spring `@Async`
- 5. 关闭线程池
- 6. 小结
- 6. 踩坑
- 1. 出现常见场景
- 2. 解决办法
- 1. 推迟关闭线程池
- 2. 每批任务使用独立的 Executor
- 3. 使用全局/单例线程池
- 3.我出现的原因
- 1.线程池的生命周期
- 2.正确的做法:线程池应当和应用同生命周期
- 4. 解决办法
- 1. 在 Spring Boot 中的推荐配置
- 2. 使用示例
- 5. 要点小结
今天在做导出的时候,涉及到多个表的查询逻辑处理和导出,就使用
线程池搭配CompletableFuture进行使用
,但是并非一帆风顺,出现一些没有接触到问题,正好记录下来,供大家借鉴
- 在正式的项目生产环境中,Java 线程池的使用通常会遵循以下三步:
- 定义(配置)
- 使用(提交任务)
- 关闭(优雅或强制终止)
下面分别介绍这三步的典型做法,并给出示例代码。
1. 定义线程池
1.1 直接使用 JDK 原生 ThreadPoolExecutor
import java