Skip to content

核心概念总结


1. Executors 工厂类

• 作用:快速创建标准线程池。 • 关键方法: • newFixedThreadPool(n):固定大小线程池。 • newCachedThreadPool():弹性线程池(适合短任务)。 • newSingleThreadExecutor():单线程顺序执行。 • 示例:

java
ExecutorService executor = Executors.newFixedThreadPool(10);

2. ExecutorService 接口

• 作用:管理线程池生命周期和任务提交。 • 核心功能: • submit(task):提交任务并返回 Future。 • shutdown():优雅关闭线程池。 • awaitTermination():等待任务完成。 • 示例:

java
executor.submit(() -> processData());
executor.shutdown();

3. newFixedThreadPool 方法

• 作用:创建固定线程数的线程池。 • 特点: • 严格限制并发数,避免资源耗尽。 • 任务队列无界(需注意内存溢出风险)。 • 适用场景:稳定负载的批量任务处理。


4. CompletableFuture 异步工具

• 作用:链式编排异步任务,支持非阻塞操作。 • 核心功能: • supplyAsync() / runAsync():启动异步任务。 • thenApply() / thenAccept():链式处理结果。 • allOf() / anyOf():组合多个任务。 • 与线程池协作:

java
ExecutorService pool = Executors.newFixedThreadPool(3);
CompletableFuture.supplyAsync(() -> fetchData(), pool)
    .thenApplyAsync(data -> process(data), pool);

关键区别与协作

组件角色典型使用场景
Executors线程池工厂快速创建标准线程池配置
newFixedThreadPool创建固定线程池的方法限制并发数,防止系统过载
ExecutorService线程池操作接口提交任务、关闭线程池、监控状态
CompletableFuture异步任务编排工具复杂任务链、并行处理、结果组合

协作流程

  1. 创建线程池:通过 Executors.newFixedThreadPool(10) 生成线程池。
  2. 提交任务:使用 ExecutorService.submit()CompletableFuture 提交任务。
  3. 异步编排:通过 CompletableFuture 组合多个任务(指定自定义线程池)。
  4. 资源释放:调用 shutdown() 关闭线程池。

最佳实践

  1. 线程池选择: • CPU 密集型:固定线程池(线程数 ≈ CPU 核数)。 • I/O 密集型:弹性线程池(如 newCachedThreadPool)。
  2. 资源释放:
    java
    executor.shutdown(); // 先尝试优雅关闭
    if (!executor.awaitTermination(60, SECONDS)) {
        executor.shutdownNow(); // 超时强制关闭
    }
  3. 异常处理:
    java
    CompletableFuture.supplyAsync(() -> task())
        .exceptionally(ex -> handleError(ex));

常见误区

• 误区1:CompletableFuture 必须用默认线程池。
纠正:可通过 ExecutorService 指定自定义线程池。

• 误区2:线程池越大越好。
纠正:过大的线程池会导致上下文切换开销,需根据任务类型调整。


总结

Executors:你的“线程池工厂”,一键生成所需配置。 • ExecutorService:线程池的“遥控器”,控制任务执行和关闭。 • CompletableFuture:任务编排的“瑞士军刀”,简化异步代码。 • 协作关系:工厂造池 → 接口管池 → 异步工具用池。

✨ 网站运行时间: 3年11月15天 ❤️ 道阻且长,行则将至 - 微信号: heikedreamer