Java中线程池原理以及参数说明

Java开发的同窗确定使用过多线程,使用多线程那就确定会用到线程池。并且我的认为线程池也是各大互联网公司在面试的时候必问的一个知识点。所以做为开发人员,必须了解线程池的原理以及具体参数的含义。

首先咱们来了解下线程池的基本原理
图片描述java

  1. 第一步即是咱们将咱们的任务提交给线程池
  2. 若是线程池中线程数小于核心线程数,则建立一个新的线程来执行该任务。不然进入步骤3
  3. 提交任务时,线程池中的空闲的线程数为0而且线程数等于核心线程数,则观察线程池中的任务队列是否已满,若是未满则将任务添加到任务队列,不然进入步骤4
  4. 若是最大线程数大于核心线程数,而且总线程数小于最大线程数,则建立一个新的线程来执行该任务。不然进入步骤5
  5. 当任务队列已满时,就执行拒绝策略(后续详解拒绝策略)

在大体了解了线程池的基本工做原理以后,咱们再细看下线程池核心类ThreadPoolExecutor面试

public ThreadPoolExecutor(int corePoolSize,
                              int maximumPoolSize,
                              long keepAliveTime,
                              TimeUnit unit,
                              BlockingQueue<Runnable> workQueue,
                              ThreadFactory threadFactory,
                              RejectedExecutionHandler handler) {
                              //省略具体的代码内容
    }

参数说明多线程

参数 说明
corePoolSize 核心线程数
maximumPoolSize 最大线程数,通常大于等于核心线程数
keepAliveTime 线程存活时间(针对最大线程数大于核心线程数时,非核心线程)
unit 存活时间单位,和线程存活时间配套使用
workQueue 任务队列
threadFactory 建立线程的工程
handler 拒绝策略

拒绝策略有如下几种spa

拒绝策略 说明
AbortPolicy 为java线程池默认的阻塞策略,不执行此任务,并且直接抛出一个运行时异常。
DiscardOldestPolicy 丢弃队列最前面的任务,而后从新尝试执行任务(重复此过程)
DiscardPolicy 也是丢弃任务,可是不抛出异常
CallerRunsPolicy 由调度线程处理该任务
相关文章
相关标签/搜索