写于:2020-04-01

一、线程池原理

01.png
如图,线程池就是一个存放了一堆已经创建好的线程的池子。

在线池中维护了一个 QUEUE 用来支持任务的异步提交和缓存未处理的任务。

当 QUEUE 中有待执行的任务时,线程池中的某个线程会主动从该 QUEUE 取出并执行任务。

QUEUE 中的 任务多时,线程池自动扩充线程到线程池中支持任务的执行(扩充需要有个阈值,每个应用程序能够承载的线程数有限)

任务少时,线程池自动回收,释放多余资源。

二、线程池实现需要具备的要素

  • 任务队列。

    用于缓存提交的任务

  • 线程数量管理功能。

    通过三个参数来实现线程数量的管理。 init:线程池的初始线程数 max:线程池最大线程数 core:线程从繁忙的 max 值开始释放资源,需要维护的下限值 三者关系: init <= core <= max

  • 任务提交拒绝策略

    如果线程数量已达到上限且任务队列已满,需要提供相应的拒绝策略来通知任务提交者。

  • 线程工厂

    用于个性化定制线程,如线程名称等。

  • QueueSize - 任务队列大小

    任务队列用于存放提价ode任务(Runnable),但是为了防止内存溢出,需要有 limit 数量对其进行控制。

  • keepedalive 时间:改时间主要决定线程各个重要参数自动维护的时间间隔。

《自定义线程池实现》