写于:2020-04-01
一、线程池原理
如图,线程池就是一个存放了一堆已经创建好的线程的池子。
在线池中维护了一个 QUEUE 用来支持任务的异步提交和缓存未处理的任务。
当 QUEUE 中有待执行的任务时,线程池中的某个线程会主动从该 QUEUE 取出并执行任务。
QUEUE 中的 任务多时,线程池自动扩充线程到线程池中支持任务的执行(扩充需要有个阈值,每个应用程序能够承载的线程数有限)
任务少时,线程池自动回收,释放多余资源。
二、线程池实现需要具备的要素
任务队列。
用于缓存提交的任务
线程数量管理功能。
通过三个参数来实现线程数量的管理。 init:线程池的初始线程数 max:线程池最大线程数 core:线程从繁忙的 max 值开始释放资源,需要维护的下限值 三者关系: init <= core <= max
任务提交拒绝策略
如果线程数量已达到上限且任务队列已满,需要提供相应的拒绝策略来通知任务提交者。
线程工厂
用于个性化定制线程,如线程名称等。
QueueSize - 任务队列大小
任务队列用于存放提价ode任务(Runnable),但是为了防止内存溢出,需要有 limit 数量对其进行控制。
keepedalive 时间:改时间主要决定线程各个重要参数自动维护的时间间隔。