脚本宝典收集整理的这篇文章主要介绍了

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 拒绝策略

拒绝策略有以下几种

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

总结

以上是脚本宝典为你收集整理的

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

全部内容,希望文章能够帮你解决

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

所遇到的程序开发问题,欢迎加入QQ群277859234一起讨论学习。如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典网站推荐给程序员好友。 本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。

80%的人都看过