线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。如果队列中没有任务,那么这些已经创建的线程会处于等待状态,直到队列中新添加了任务。
线程池的主要优点是,通过复用已存在的线程,降低线程创建和销毁造成的消耗,提高响应速度,提高线程可管理的数量等。
线程池的实现通常包括以下几个关键组成部分:
-
任务队列:用于存储待处理的任务。可以是一个FIFO的队列,也可以是一个优先级队列,或者其他可以满足需求的数据结构。
-
工作线程:线程池中的线程被称为"工作线程"。当线程池被创建后,这些线程通常会被立即创建,并等待任务。
-
线程池管理器:用于创建、销毁、调度工作线程。
关于线程池的参数,以下是一些常见的:
-
线程池大小:线程池中包含的线程数量。这个数量应该根据系统资源进行设置。如果设置过大,可能会消耗过多的系统资源,如果设置过小,可能会因为线程过少,导致任务等待时间过长。
-
核心线程数:核心线程是始终存在的线程,即使没有任务需要处理。当线程数大于核心线程数时,非核心线程会在指定时间内无任务可做后被回收。
-
最大线程数:线程池中允许的最大线程数。当任务队列满了,且核心线程都在工作时,线程池可以创建更多的线程,但是线程总数不能超过最大线程数。
-
空闲线程存活时间:非核心线程可以空闲的最长时间,超过这个时间就会被回收。
-
任务队列容量:任务队列的大小。
-
线程工厂:用于创建新线程的工厂类。可以通过线程工厂给每个创建出来的线程设置更详细的参数,比如命名线程以方便调试。
-
拒绝策略:当任务队列和线程池都满了,说明线程池已经无法处理更多的任务,这时可以通过拒绝策略处理新来的任务。常见的策略有抛出异常、直接丢弃任务、丢弃队列中最老的任务等。
以上是线程池的一些基本概念和参数,不同的线程池实现可能会有不同的参数和行为。