线程池 ThreadPoolExecutor

  • 2015-12-21
  • 3,119
  • 0

常用线程池

  1. newFixedThredaPool 固定线程数量的线程池,改线程池中的线程数量始终不变。当有一个新任务提交时,若有空闲线程,则立即执行,否则会被暂存到一个任务队列中
  2. newSingleThreadExecutor 只有一个线程的线程池
  3. newCachedThreadPool 可根据实际情况调整线程数量的线程池。若有空闲线程可以复用,则优先使用,否则创建新线程。执行完毕后返回线程池复用
  4. newSingleThreadScheduledExecutor & newScheduledThreadPool 在某个固定的延时之后执行或者周期性执行

自定义线程池

  • corePoolSize 指定线程池中的线程数量
  • maximumPoolSize 最大线程数量
  • keepAliveTime 当线程数量超过 corepoolSize 时,多余的空闲线程存活时间
  • unit keepAliveTime 时间单位
  • workQueue 任务队列,被提交但尚未执行的任务
  • threadFactory 线程工厂,一般使用默认
  • handler 拒绝策略

内置拒绝策略

  • AbortPolicy 直接抛出异常,阻止系统运行
  • CallerRunsPolicy 只要线程池未关闭,该策略直接在调用者线程中运行当前被丢弃的任务
  • DiscardOledestPolicy 丢弃最老的一个请求,并再次尝试提交当前任务
  • DiscardPolice 默默地丢弃无法处理的任务,不予任何处理

参数解释

参数workQueue指被提交但未执行的任务队列。

  • 直接提交的队列:SynchronousQueue,该队列没有容量,每一个插入操作都要等待一个相应的删除操作。
  • 有界队列:ArrayBlockingQueue,新任务提交,若线程池实际线程数小于corePoolSize,则会优先创建新线程,若大于corePoolSize,则会将新任务提交到等待队列,若队列已满,则在总线程数不大于maximumPoolSize的前提下,创建新的线程执行任务,若大于maximumPoolSize,则执行拒绝策略。
  • 无界队列:LinkedBlockingQueue,提交新任务,如果当前线程小于corePoolSize,则新建线程,否则加入队列。若任务创建速度大于处理速度,无界队列会保持快速增长,直到耗尽系统资源。
  • 优先队列:PriorityBlockingQueue.
>> 转载请注明来源:线程池 ThreadPoolExecutor

评论

还没有任何评论,你来说两句吧

发表评论