跳到主要内容

简述线程池原理以及核心参数 ?

参考答案:

线程池是一种多线程处理形式,它处理了大量小线程的任务。线程池维护多个线程,并允许外部任务进行排队。当有新任务到来时,线程池会判断核心线程是否已满,如果未满则创建新线程执行任务,如果已满则判断队列是否已满,如果未满则将新任务加入队列等待执行,如果已满则判断线程池是否已满,如果未满则创建新线程执行任务,如果已满则根据拒绝策略处理新任务。

线程池的核心参数包括:

  1. corePoolSize(核心线程数):线程池创建时初始化的线程数,即使这些线程处于空闲状态,也不会被销毁。
  2. maximumPoolSize(最大线程数):线程池允许的最大线程数,当线程池中的线程数量达到这个值时,后续的新任务将会根据拒绝策略进行处理。
  3. keepAliveTime(活跃时间):当线程池中的线程数量超过corePoolSize时,这是多余空闲线程在终止前等待新任务的最长时间。
  4. workQueue(阻塞队列):用于存放待处理的任务的队列,常见的阻塞队列有ArrayBlockingQueue、LinkedBlockingQueue、SynchronousQueue等。
  5. RejectedExecutionHandler(拒绝策略):当任务队列和线程池都满了,说明线程池已经装满了,那么必须采取一种策略处理无法执行的新任务。Java中提供了四种拒绝策略:AbortPolicy(默认策略,直接抛出异常)、CallerRunsPolicy(调用者运行策略,用调用者的线程来运行任务)、DiscardOldestPolicy(丢弃最老策略,丢弃队列中等待最久的任务,然后重新尝试执行任务)、DiscardPolicy(丢弃任务策略,不处理,直接丢弃掉)。

这些参数共同决定了线程池的行为和性能。正确配置这些参数可以确保线程池有效地处理任务,同时避免资源过度消耗或任务处理延迟。