1、为什么要用线程池:
1)降低资源消耗。通过重复利用已创建的线程降低线程创建、销毁线程造成的消耗。
2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配、调优和监控。
2、一般一个简单线程池至少包含下列组成部分:
线程池管理器(ThreadPoolManager):用于创建并管理线程池。
工作线程(WorkThread): 线程池中线程。
任务接口(Task):每个任务必须实现的接口,以供工作线程调度任务的执行。
任务队列:用于存放没有处理的任务。提供一种缓冲机制。
3、调整优化线程池尺寸是高级线程池要解决的一个问题。主要有下列解决方案:
方案一:动态增加工作线程;
方案二:优化工作线程数目;
方案三:一个服务器提供多个线程池。
4、线程池的应用范围:
1)需要大量的线程来完成任务,且完成任务的时间比较短。 WEB服务器完成网页请求这样的任务,使用线程池技术是非常合适的。因为单个任务小,而任务数量巨大,你可以想象一个热门网站的点击次数。 但对于长时间的任务,比如一个Telnet连接请求,线程池的优点就不明显了。因为Telnet会话时间比线程的创建时间大多了。
2)对性能要求苛刻的应用,比如要求服务器迅速相应客户请求。
3)接受突发性的大量请求,但不至于使服务器因此产生大量线程的应用。突发性大量客户请求,在没有线程池情况下,将产生大量线程,虽然理论上大部分操作系统线程数目最大值不是问题,短时间内产生大量线程可能使内存到达极限,并出现"OutOfMemory"的错误。