背景
Java 底层提供了 Thread 类支持开发人员手动创建线程执行任务,但是这种操作会存在以下问题:
- 每次都要重新创造和回收
Thread对象,性能较差。如果并发线程数较大,且任务执行时间较短,频繁创建和回收线程对象会大大降低系统的效率 - 线程缺乏统一管理,不同业务之间可能会无限制的创建线程,相互之间竞争资源,容易导致系统资源占用过多,从而引起 OOM 或程序奔溃
- 功能比较单一,缺乏其他通用能力
在这样的背景下,结合池化思想,则可以通过线程池来优化设计。具体的优势在于:
- 通过重复利用已创建的线程,避免因频繁创建和回收线程对象而对系统造成的资源开销
- 提高任务响应速度,当任务到达后,可以立即使用已创建的线程执行任务
- 统一管理线程的分配、调度和监控,可有效控制最大并发线程数,提高系统资源的使用率,同时避免过多资源竞争,避免堵塞
使用线程池时场景,一般满足以下特征:
- 单个任务的处理时间比较短
- 需要处理的任务数量特别大
Executor 框架
Executor 是 Java 中一个经典的多线程任务管理框架,其主要提供了任务、任务执行线程池、任务执行结果三个组件,每个组件的具体定义与含义如下:
| 组件 | 含义 |
|---|---|
| 任务 | Executor 框架提供了 Runnable 接口和 Callable 接口,任务需要实现这两个接口才能被线程执行 |
| 任务执行线程池 |

最低0.47元/天 解锁文章
987





