一、线程池是一种并发编程的技术,它管理和维护了一组可重用的线程,以便在需要时执行任务。线程池的目标是在减少线程创建和销毁的开销的同时,提高任务执行的效率和性能。
线程池通常包括以下主要组件:
-
任务队列(Task Queue): 用于存储待执行的任务。当有新任务需要执行时,线程池将任务放入队列中。
-
线程池管理器(ThreadPool Manager): 负责创建、销毁和管理线程池中的线程。它根据任务队列中的任务数量和线程池的配置来动态调整线程数量。
-
工作线程(Worker Threads): 实际执行任务的线程。它们从任务队列中取出任务并执行,然后返回结果或通知线程池任务的完成。
二、线程池的七大核心参数
1.corePoolSize 核心线程数目 - 池中会保留的最多线程数。
2.maximumPoolSize 最大线程数目 - 核心线程+救急线程的最大数目。
3 keepAliveTime 生存时间 - 救急线程的生存时间,生存时间内没有新任务,此线程资源会释放。
4.unit 时间单位 - 救急线程的生存时间单位,如秒、毫秒等。
5.workQueue - 当没有空闲核心线程时,新来任务会加入到此队列排队,队列满会创建救急线程执行任务。
6.threadFactory 线程工厂 - 可以定制线程对象的创建,例如设置线程名字、是否是守护线程等。
7.handler 拒绝策略 - 当所有线程都在繁忙,workQueue 也放满时,会触发拒绝策略。
(1)抛异常 java.util.concurrent.ThreadPoolExecutor.AbortPolicy。
(2)由调用者执行任务 java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy。
(3)丢弃任务 java.util.concurrent.ThreadPoolExecutor.DiscardPolicy。
(4)丢弃最早排队任务 java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy。