zoukankan      html  css  js  c++  java
  • ThreadPoolExecutor学习

    http://www.iteye.com/topic/1118660

    整个ThreadPoolExecutor的任务处理有4步操作: 

    • 第一步,初始的poolSize < corePoolSize,提交的runnable任务,会直接做为new一个Thread的参数,立马执行
    • 第二步,当提交的任务数超过了corePoolSize,就进入了第二步操作。会将当前的runable提交到一个block queue中
    • 第三步,如果block queue是个有界队列,当队列满了之后就进入了第三步。如果poolSize < maximumPoolsize时,会尝试new 一个Thread的进行救急处理,立马执行对应的runnable任务
    • 第四步,如果第三步救急方案也无法处理了,就会走到第四步执行reject操作
    几点说明:(相信这些网上一搜一大把,我这里简单介绍下,为后面做一下铺垫)
    • block queue有以下几种实现:
      1. ArrayBlockingQueue :  有界的数组队列
      2. LinkedBlockingQueue : 可支持有界/无界的队列,使用链表实现
      3. PriorityBlockingQueue : 优先队列,可以针对任务排序
      4. SynchronousQueue : 队列长度为1的队列,和Array有点区别就是:client thread提交到block queue会是一个阻塞过程,直到有一个worker thread连接上来poll task。
    • RejectExecutionHandler是针对任务无法处理时的一些自保护处理:
      1. Reject 直接抛出Reject exception
      2. Discard 直接忽略该runnable,不可取
      3. DiscardOldest 丢弃最早入队列的的任务
      4. CallsRun 直接让原先的client thread做为worker线程,进行执行
  • 相关阅读:
    Spring 整合Mybatis
    Spring 配置说明
    AutoCAD.Net/C#.Net QQ群:193522571 虚拟方法的使用
    VLAN帧格式详解
    内网安全体系建设工作思路
    IT公司常见的内网漏洞表格
    内网安全运营的逻辑体系架构
    域安全的基础知识
    利用DNS日志进行MySQL盲注
    Linux内存凭据提取mimipenguin
  • 原文地址:https://www.cnblogs.com/vigarbuaa/p/2790957.html
Copyright © 2011-2022 走看看