Java JDK 自带的线程池主要包含以下几种类型,这些线程池都是通过 java.util.concurrent
包中的 Executors
工具类提供的工厂方法创建:
-
固定大小线程池 (Fixed Thread Pool):
newFixedThreadPool(int nThreads)
:创建一个定长线程池,可控制线程最大并发数,超出的任务将在队列中等待。这种线程池适用于处理长期存在并且可以并发执行的任务,能够确保线程池不会过度膨胀。
-
单线程线程池 (Single Thread Executor):
newSingleThreadExecutor()
:创建一个只有一个工作线程的线程池,如果所有任务都已在处理,新提交的任务将会在队列中等待。适合用来执行串行任务,或者确保任务按照一定的顺序执行。
-
可缓存线程池 (Cached Thread Pool):
newCachedThreadPool()
:创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程;若无可用线程,则新建线程。这种类型的线程池适合处理大量的短生命周期任务,因为它能快速回收和重新利用线程资源。
-
定时/周期性线程池 (Scheduled Thread Pool):
newScheduledThreadPool(int corePoolSize)
:创建一个定长线程池,支持定时及周期性任务执行,类似于Timer
,但功能更强大。你可以设置延时执行任务,或者定期执行任务。
每种线程池都有其特定的应用场景,选择合适的线程池可以根据任务的特性(如任务的数量、执行时间长短、是否需要周期执行等)来确定。