美文网首页
自定义线程池执行流程

自定义线程池执行流程

作者: laod_wh | 来源:发表于2019-09-25 18:07 被阅读0次

当任务提交给ThreadPoolExecutor 线程池中

  • 先检查核心线程数是否已经全部使用,如果没有交由核心线程去执行任务
  • 如果核心线程数已经全部占用,则将任务添加到队列里面
  • 如果队列已经占满,比较当前线程池的中线程的数量是不是与超过maximumPoolSize
  • 如果没有查过则创建线程去执行,也就是说线程池最多可以接受多少任务呢?就是maximumPoolSize+队列的大小。
  • 当线程池中的线程的数量大于corePoolSize数量有空闲线程则执行回收,回收时间是keepAliveTime,单位是unit,都是初始化的时候设置的。
//三种阻塞队列:
    BlockingQueue<Runnable> workQueue = null;
    workQueue = new ArrayBlockingQueue<>(5);//基于数组的先进先出队列,有界
    workQueue = new LinkedBlockingQueue<>();//基于链表的先进先出队列,无界
    workQueue = new SynchronousQueue<>();//无缓冲的等待队列,无界
//四种拒绝策略:
    RejectedExecutionHandler rejected = null;
    rejected = new ThreadPoolExecutor.AbortPolicy();//默认,队列满了丢任务抛出异常
    rejected = new ThreadPoolExecutor.DiscardPolicy();//队列满了丢任务不异常
    rejected = new ThreadPoolExecutor.DiscardOldestPolicy();//将最早进入队列的任务删,之后再尝试加入队列
    rejected = new ThreadPoolExecutor.CallerRunsPolicy();//如果添加到线程池失败,那么主线程会自己去执行该任务
//五种线程池:
    ExecutorService threadPool = null;
    threadPool = Executors.newCachedThreadPool();//有缓冲的线程池,线程数 JVM 控制
    threadPool = Executors.newFixedThreadPool(3);//固定大小的线程池
    threadPool = Executors.newScheduledThreadPool(2);
    threadPool = Executors.newSingleThreadExecutor();//单线程的线程池,只有一个线程在工作
    threadPool = new ThreadPoolExecutor();//默认线程池,可控制参数比较多 

多线程编程基础知识:

/**
了解JDK Executors线程池吗?
知道JDK提供了哪些默认的实现吗?
看过阿里巴巴java开发手册吗?知道为啥不允许使用默认的实现吗?
你们没有用默认的吧?那来介绍一下你们自定义线程池的几个常用参数呗?
你这个几个参数的值是怎么得来的呀?算出来的?怎么算出来的?
线程池里面的任务是IO密集型的还是计算密集型的呢?
好,现在我们有一个自定义线程池了,来说一下你这个线程池的工作流程呗?
那你这个线程池满了怎么办呀?拒绝?咋拒绝?有哪些拒绝策略呢?
别紧张,随便说两个就行。
*/

相关文章

  • 线程池 | 执行流程、拒绝策略

    线程池执行流程 想要真正的了解线程池的执行流程,就要先从线程池的执行方法execute()说起,execute()...

  • 线程池的工作流程理解与项目中实战

    线程池主要处理流程 1.线程池判断核心线程是否已经满了,否 则会创建线程执行任务,是 进入下一个流程2.线程池判断...

  • Java线程池任务执行流程

    线程池任务执行流程: 当线程池小于corePoolSize时,新提交任务将创建一个新线程执行任务,即使此时线程池中...

  • 自定义线程池执行流程

    当任务提交给ThreadPoolExecutor 线程池中 先检查核心线程数是否已经全部使用,如果没有交由核心线程...

  • 线程池2

    1、线程池执行流程: 线程池:线程池,这一篇或许就够了[https://www.jianshu.com/p/210...

  • 线程池执行流程

    ThreadPoolExecutor介绍 通过 ThreadPoolExecutor 创建线程池,API 如下所示...

  • java线程池源码分析

    从线程池使用进行实现分析一.自定义线程池1.自定义线程池2.构造完成之后状态3.关键参数介绍二.执行任务1.exe...

  • Executors

    自定义线程池: public class MyThreadPoolDemo {/**第一个线程就用核心线程数去执行...

  • Java核心(二)深入理解线程池ThreadPool

    本文你将获得以下信息: 线程池源码解读 线程池执行流程分析 带返回值的线程池实现 延迟线程池实现 为了方便读者理解...

  • java线程池执行原理

    描述 JDK提供的工具类生成的线程池会造成内存溢出,所以需要自己定义线程池。 测试代码 线程池执行流程 提交任务流...

网友评论

      本文标题:自定义线程池执行流程

      本文链接:https://www.haomeiwen.com/subject/kmujuctx.html