1. 什么是线程池?
顾名思义,存放线程的一个池子。
2.怎么设计一个线程池
(1) 新建一个数组,创建一堆线程存放进去;
(2) 线程池中的线程来处理任务,处理完成后回收线程而不是销毁线程;
(3) 设计等待队列来存放来不及处理的任务;
(4) 拒绝策略
一般一个简单线程池至少包含下列组成部分。
- 线程池管理器(ThreadPoolManager):用于创建并管理线程池
- 工作线程(WorkThread): 线程池中线程
- 任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
- 任务队列:用于存放没有处理的任务。提供一种缓冲机制
后来才发现线程池其实是这样的一个流程:
- 创建线程池内所需的线程数量,并指定一个统一的函数,比如work();
- work()主动任务队列里找任务做,如果空的话则阻塞。
- 任务可以是不同的对象,但是他们提供统一的任务处理接口,比如process();可以用模板来增加扩展性。
- work()函数取来任务对象,然后调用process()就行了。
- 当然还要涉及任务队列的同步互斥问题。