首页 > 编程 > Java > 正文

Java并发编程 - Executor框架详解

2019-11-06 06:18:30
字体:
来源:转载
供稿:网友

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不会使用任何资源.

未完待续


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表