1. 什么是线程池?

    顾名思义,存放线程的一个池子。

2.怎么设计一个线程池

    (1) 新建一个数组,创建一堆线程存放进去;

    (2) 线程池中的线程来处理任务,处理完成后回收线程而不是销毁线程;

    (3) 设计等待队列来存放来不及处理的任务;

    (4) 拒绝策略

一般一个简单线程池至少包含下列组成部分。

  1. 线程池管理器(ThreadPoolManager):用于创建并管理线程池
  2. 工作线程(WorkThread): 线程池中线程
  3. 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
  4. 任务队列:用于存放没有处理的任务。提供一种缓冲机制

后来才发现线程池其实是这样的一个流程:

  1. 创建线程池内所需的线程数量,并指定一个统一的函数,比如work();
  2. work()主动任务队列里找任务做,如果空的话则阻塞。
  3. 任务可以是不同的对象,但是他们提供统一的任务处理接口,比如process();可以用模板来增加扩展性。
  4. work()函数取来任务对象,然后调用process()就行了。
  5. 当然还要涉及任务队列的同步互斥问题。