1、 当线程池被创建后,里面就会创建5个空线程 2、 当我们向线程池中加入一个任务后,就会有一个空线程接管该任务,然后运行起来,随着我们不断向线程池中加入任务,线程池中的空线程就会逐一的接管任务。 3、 在某一时刻任务数量就会超出5个,当超出数量时,线程池并不会立即被创建,而是等待大概500毫秒左右,这么做的目的是看看在这段时间内是否有其他线程完成任务来接管这个线程请求,这样既可以避免因创建新的线程而造成的消耗,如果这段时间没有线程完成,就会创建一个新线程来执行这个任务。 4、 当线程数量达到下限时,每加入一个任务,就会增加一个新线程,这段时间,任务和线程数量就会持续增加,直到线程数量达到上限为止。 5、 当线程数量达到上限时,继续增加任务,线程数量将不会增加,比如你向线程池中加入100个任务,则只有25个进入线程池(和上限值相同),另外75个在线程池外排队等待,当线程池中的某一个线程完成任务后,并不会被终止,而是从排队等候的任务中选择一个任务来执行,这样就减少了因创建线程而消耗的时间。 6、 当排入所有任务后,随着线程池内的任务被逐步完成,线程外部等候的任务就逐步调入线程池中,任务数量减少,但线程数量保持恒定,。 7、 随着任务逐步完成,总有某一时刻,任务数量少于线程上限值,这是线程池内多余的空线程就会在空闲2分钟后被释放并回收相关资源,线程数目逐步减少,直到达到下限为止。 8、 当任务数量减少的下限值后,线程池中线程数量保持不变,其中一部分在执行任务,另一部分处于空运行状态。 9、 当所有任务完成后,线程池回复初始状态,运行5个空线程。 从上面可以看出,线程池一个提高效率的关键是完成任务可以继续为其他任务服务,这样就可以使用有限的几个固定线程轮流为大量的任务服务,从而减少了因为频繁创建线程所造成的消耗。
|