Java并发编程 - Executor框架详解

本文详细介绍了Java的Executor框架,包括其两级调度模型和工作流程。Executor框架通过将任务分解并映射到线程,实现了任务调度与执行的分离。重点讲解了ThreadPoolExecutor的实现,如FixedThreadPool、SingleThreadExecutor和CachedThreadPool,分析了它们的配置参数和适用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Executor框架(接口)负责在用户级别进行任务的调度和执行, 实现了任务调度和执行的分离.

Executor框架简介

Executor框架的两级调度模型

executor-workflow

在上层, Java程序通过将应用分解为若干个任务(task),
然后使用用户级的调度器(Executor框架)将task映射为固定数量的Java线程.

在底层, Java线程与操作系统的线程是一一对应的关系, 由操作系统调度给可用的CPU. 底层的调度不受上层的影响.

Executor框架工作流程

executor-workflow

主要包括3大组件:

  • 异步任务: Runnable或者Callable的实现类;
  • 异步任务的调度和执行(用户级别): Executor接口的实现类ThreadPoolExecutorScheduledThreadPoolExecutor;
  • 异步计算的结果: 接口Future和接口的实现类FutureTask.

组件间关系如下:

executo-inherent

ThreadPoolExecutor详解

ThreadPoolExecutor是Executor框架的核心, 是线程池的实现类, 负责异步进行任务的调度和执行, 共有以下重要的配置参数:

  • corePoolSize: 核心线程池大小
  • maximumPoolSize: 最大线程池大小;
  • BlockingQueue: 用于保存任务的工作队列;

通过工具类Executors, 可以快速创建3种预定义参数的ThreadPoolExecutor, 以下将分别进行分析.

FixedThreadPool详解

被称为可重用固定线程数的线程池, 实际上就是ThreadPoolExecutorcorePoolSizemaximumPoolSize设置为相同大小,
同时使用了无界队列的情况.

SingleThreadExecutor详解

同一时间只有一个线程在执行任务, 为了确保任务的顺序执行.
实际上就是FixedThreadPool, corePoolSizemaximumPoolSize设置为1的特殊情况.

CachedThreadPool详解

corePoolSize设置为0, 在运行过程中会根据需要来创建线程执行任务, 使用没有容量的SynchronousQueue作为线程池的工作队列.
但是maximumPool是无界的, 所以适合于应对大量短任务的情况, 对于运行完任务的线程, 会有一个等待时间,
默认超过60秒没有新任务到来则自动销毁, 所以长时间保持空闲的CachedThreadPool不会使用任何资源.

未完待续

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值