线程池的核心参数包括以下几个:
- 核心线程数(corePoolSize):线程池中最小的线程数量。即使是空闲状态,核心线程也不会被回收。
- 最大线程数(maximumPoolSize):线程池中最大的线程数量。当任务量增加时,线程池会动态地创建新的线程,直到达到最大线程数。
- 空闲线程存活时间(keepAliveTime):当线程池中的线程数量超过核心线程数时,多余的空闲线程的存活时间。超过这个时间,空闲线程会被回收。
- 阻塞队列(workQueue):用于存放待执行的任务的队列。当线程池中的线程都在忙于执行任务时,新的任务会被放入队列中等待执行。
- 线程工厂(threadFactory):用于创建新线程的工厂类。
- 拒绝策略(rejectedExecutionHandler):当线程池已经达到最大线程数,并且队列也已满时,新的任务无法被执行时的处理策略。常见的拒绝策略有:抛出异常、丢弃任务、丢弃队列中最旧的任务、调用提交任务的线程来执行任务。
线程池的执行原理如下:
- 当有新的任务提交到线程池时,线程池会根据核心线程数和当前线程池中的线程数量来决定是创建新的线程还是将任务放入阻塞队列中。
- 如果当前线程池中的线程数量小于核心线程数,线程池会创建新的线程来执行任务。
- 如果当前线程池中的线程数量达到核心线程数,线程池会将任务放入阻塞队列中等待执行。
- 如果阻塞队列已满,但线程池中的线程数量还没有达到最大线程数,线程池会创建新的线程来执行任务。
- 如果线程池中的线程数量达到最大线程数,并且阻塞队列也已满,根据配置的拒绝策略来处理新的任务。
- 当线程池中的线程执行完任务后,会继续从阻塞队列中取出任务来执行,直到线程池关闭或者没有待执行的任务。
通过合理地配置线程池的参数,可以根据系统的需求来控制线程的数量和任务的执行方式,提高系统的并发性能和资源利用率。