1、Executors.newFixedThreadPool(4); // 核心线程 传几个就有几个核心线程和最大线程数
2、Executors.newCachedThreadPool(); // 核心线程0 ,全是临时工,最大线程数为21亿
3、Executors.newScheduledThreadPool(4); // 传几个就有几个核心线程,最大线程数是21亿
4、Executors.newSingleThreadExecutor(); // 只有一个主线程,最大线程数也是一个
-
FixedThreadPool (newFixedThreadPool):
- 创建一个固定大小的线程池,即线程池中的线程数量始终保持恒定。当线程池中的所有线程都处于活动状态时,新提交的任务将会等待,直到有线程空闲出来。如果某个线程由于异常结束,线程池会重新创建一个新的线程来替代。这种线程池适用于处理大量短生命周期的任务,且对线程数有严格限制的场景。
-
SingleThreadExecutor (newSingleThreadExecutor):
- 创建一个只有一个工作线程的线程池。这意味着所有提交到此线程池的任务都会按照提交顺序逐个被执行,不存在并行执行的情况。新提交的任务如果发现线程正在执行任务,则会进入队列排队等待。这种线程池适用于需要保证任务执行顺序,或者希望避免因多线程共享资源而产生的同步开销的场景。
-
CachedThreadPool (newCachedThreadPool):
- 创建一个可缓存线程的线程池。线程池中的线程数量可根据需要自动调整,无界增长。当线程池中没有预先创建的可用线程时,会创建新的线程来处理任务;当线程闲置一段时间(默认为60秒)后,会被自动回收。这种线程池适用于处理大量短期异步任务,且任务的创建速率可能会超过其执行速率的场景,但需注意防止线程数过度膨胀导致系统资源耗尽。
-
ScheduledThreadPool (newScheduledThreadPool):
- 创建一个定长线程池,支持定时及周期性任务执行。与
FixedThreadPool
类似,它也有固定数量的核心线程,但额外提供了调度功能。可以将延时任务或定时任务提交到此线程池,由它负责按照指定的延迟或定期间隔执行任务。这种线程池适用于需要执行定时任务或定期执行某项操作的应用场景,比如定时清理、定时统计等。
- 创建一个定长线程池,支持定时及周期性任务执行。与
这些线程池都是基于 ThreadPoolExecutor
类的封装,提供了便捷的创建方式。在实际使用时,根据任务特性(如任务数量、执行时间、是否需要定时执行等)以及系统资源限制,选择合适的线程池类型能够有效地管理和优化并发性能。