- corePoolSize(核心线程数):
线程池中一直存活的线程数量。在线程池初始化或者任务提交后,线程池会首先创建corePoolSize个线程来执行任务,即使这些线程处于空闲状态。 - maximumPoolSize(最大线程数):
线程池中允许存在的最大线程数量。如果队列中的任务数超过了maximumPoolSize,那么线程池会创建新的线程来处理该任务。可通过调整该参数来设定线程池的最大并发处理能力。 - keepAliveTime(线程空闲时间):
在线程池中,超过corePoolSize数量的线程在空闲时间超过keepAliveTime后会被销毁,以减少资源的消耗。通常情况下,线程在空闲时间超过keepAliveTime后,会被销毁直到线程池中的线程数不超过corePoolSize。 - unit(线程空闲时间单位):
keepAliveTime的时间单位。可以选择秒、毫秒、微秒等单位。 - workQueue(任务队列):
线程池中用于存储任务的队列。当任务来临时,如果当前线程数小于corePoolSize,则会创建新的线程来执行任务;如果当前线程数大于等于corePoolSize,则会将任务加入到workQueue中。 - threadFactory(线程工厂):
线程工厂用于创建线程,可以定制线程的一些属性,如线程名、优先级等。可以通过实现ThreadFactory接口来自定义线程工厂。 - handler(饱和策略):
当线程池中的线程数达到maximumPoolSize并且任务队列已满时,需要采取一种策略来处理新提交的任务。常见的饱和策略有:AbortPolicy(抛出RejectedExecutionException异常)、CallerRunsPolicy(由提交任务的线程来执行该任务)、DiscardOldestPolicy(丢弃队列中最旧的任务)和DiscardPolicy(直接丢弃新提交的任务)。
总结:
在程序启动时,线程池会创建一定数量的核心线程,这些线程会一直存活在线程池中,即使它们处于空闲状态也不会被销毁。执行顺序大致是:提交任务-》核心线程数-》任务队列-》最大线程数-》拒绝策略,详见如下图:
线程池七大核心参数执行顺序
最新推荐文章于 2024-08-28 20:58:28 发布