线程池执行策略

更新时间:2023-06-14 03:59:14 阅读: 评论:0

线程池执⾏策略
线程池执⾏策略
1.⽤户提交 任务 给 线程池 ;
2.线程池接收到任务,会进⾏以下策略(核⼼线程池-》任务缓存队列-》线程池(最⼤线程数)-》按照指定的策略处理⽆法执⾏的任务):public void execute(Runnable command) { if (command == null) throw new NullPointerException(); if (poolSize >= corePoolSize ||
!addIfUnderCorePoolSize(command)) {// if (runState == RUNNING && workQueue.offer(command)) { if (runState != RUNNING || poolSize == 0) ensureQueuedTaskHandled(command); } el if (!addIfUnderMaximumPoolSize(command)) reject(command); // is shutdown or saturated }}
暑假随笔–1.核⼼线程池:判断“核⼼线程池”是否已满,否,则创建线程执⾏任务;是,则移交“任务缓存队列”
丁香成人区利润最大化原则–2.任务缓存队列:判断“任务缓存队列”是否已满,否,则将任务存于“任务缓存队列”中;是,则移交“最⼤线程池”
任务缓存队列及排队策略
  任务缓存队列,即workQueue,它⽤来存放等待执⾏的任务。江南赋
  workQueue的类型为BlockingQueue,通常可以取下⾯三种类型:
  1)ArrayBlockingQueue:基于数组的先进先出队列,此队列创建时必须指定⼤⼩;英语培训学校
  2)LinkedBlockingQueue:基于链表的先进先出队列,如果创建时没有指定此队列⼤⼩,则默认为Integer.MAX_VALUE;
  3)synchronousQueue:这个队列⽐较特殊,它不会保存提交的任务,⽽是将直接新建⼀个线程来执⾏新来的任务。
–3.最⼤线程池:判断“最⼤线程池”是否已满,否,则创建线程执⾏任务;是,则移交给“线程溢出任务处理策略”
–4.线程溢出任务处理策略:按照指定的策略来处理⽆法执⾏的任务
蛟矶庙任务拒绝策略
  当线程池的任务缓存队列已满并且线程池中的线程数⽬达到maximumPoolSize,如果还有任务到来就会采取任务拒绝策略,通常有以下四种策略:
英语拼音营运能力分析指标ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛出异常。ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前⾯的任务,然后重新尝试执⾏任务(重复此过程)ThreadPoolExecutor.CallerRunsPolicy:由调⽤线程处理该任务

本文发布于:2023-06-14 03:59:14,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/89/1037537.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:任务   线程   队列   缓存
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图