标签:
线程池的理解:
线程池起到资源管理的作用,这里的资源当然是线程(实质上也是对内存和处理能力的调配)。
可以把线程池类比成一个工厂,线程就是工厂里的生产线(或设备)。工厂最少有5台生产线,随下达的生产任务的多少来增加或减少生产线。
线程池的描述:
我们假设线程池中的线程数量下线为5,上限为25。
1.当线程池被创建后,里面就会创建5个空线程(和下限值相同);
2.当我们向线程池中排入一个任务后,就会有一个空线程接手该任务,然后运行起来。
随着我们不断向线程池中排入任务,线程池中的空线程逐一接手任务并被执行。
3.随着任务的增加,在某一时刻任务数量会超出下限。当任务请求数量超出下限时,线
程池并不会立即创建新线程,而是等待大约500毫秒左右,这么做的目的是看看在这段时间
内是否有其他线程完成任务来接手这个请求,这样就可以避免因创建新线程而造成的消耗。
如果这段时间内没有线程完成任务,就创建一个新线程去执行新任务。
4.当任务数量超过下限后,每排入一个新任务,就会增加一个新线程,这段时间,任务
和线程数量都持续增加,直至线程数量达到上限值为止。
5.当线程数量达到上限时,继续增加任务,线程数量将不再增加。比如你向线程池中排入
100个任务,则只有25个进入线程池(和上限相同),另外75个在线程池外排队等待。当线程
池中的某个线程完成任务后,并不会被终止,而是从等待队列中选择一个任务继续执行,这样就
减少了因创建和销毁线程而消耗的时间。
6.当排入所有的任务后,随着线程池内的任务被逐步完成,线程池外部等待的任务被逐步调
入线程池,任务的数量逐步减少,但线程的数量保持恒定,始终和上限值相同。
7.随着任务被逐步完成,总有某一时刻,任务数量会小于上限值,这时线程池内多余的线程
会在空闲2分钟后被释放并回收相关资源。线程数目逐步减少,直到达到下限值为止。
8.当任务数量减少到下限值之下时,线程池中的线程数目保持不变(始终和下限值相同),其
中一部分在执行任务,另一部分处于空运行状态。
9.当所有任务都完成后,线程池恢复初始状态,运行5个空线程。
由上面的论述可以看出线程池提高效率的关键是一个线程完成任务后可以继续为其他任务服务,
这样就可以使用有限的几个固定线程轮流为大量的任务服务,从而减少了因频繁创建和销毁线程所
造成的消耗。
标签:
原文地址:http://www.cnblogs.com/barker/p/4521550.html