【ThreadPoolExecutor的使用和思考】
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler)
 
 
1. 参数解释
corePoolSize:        线程池维护线程的最少数量
maximumPoolSize:线程池维护线程的最大数量
keepAliveTime:      线程池维护线程所允许的空闲时间
unit:                   线程池维护线程所允许的空闲时间的单位
workQueue:          线程池所使用的缓冲队列
handler:               线程池对拒绝任务的处理策略,默认值ThreadPoolExecutor.AbortPolicy()

unit可选的参数为java.util.concurrent.TimeUnit中的几个静态属性:NANOSECONDS、MICROSECONDS、MILLISECONDS、SECONDS。
workQueue常用的是:java.util.concurrent.ArrayBlockingQueue
handler有四个选择:
ThreadPoolExecutor.AbortPolicy()            抛出java.util.concurrent.RejectedExecutionException异常
ThreadPoolExecutor.CallerRunsPolicy()       重试添加当前的任务,他会自动重复调用execute()方法
ThreadPoolExecutor.DiscardOldestPolicy()    抛弃旧的任务
ThreadPoolExecutor.DiscardPolicy()          抛弃当前的任务

2. 方法调用
一个任务通过 execute(Runnable)方法被添加到线程池,任务就是一个Runnable类型的对象,任务的执行方法就是 Runnable类型对象的run()方法。

3. 处理机制
当一个任务通过execute(Runnable)方法欲添加到线程池时:
如果此时线程池中的数量小于corePoolSize,即使线程池中的线程都处于空闲状态,也要创建新的线程来处理被添加的任务。
如果此时线程池中的数量等于corePoolSize,但是缓冲队列 workQueue未满,那么任务被放入缓冲队列。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量小于maximumPoolSize,建新的线程来处理被添加的任务。
如果此时线程池中的数量大于corePoolSize,缓冲队列workQueue满,并且线程池中的数量等于maximumPoolSize,那么通过 handler所指定的策略来处理此任务。

处理任务的多时:
核心线程corePoolSize、任务队列workQueue、最大线程maximumPoolSize,如果三者都满了,使用handler处理被拒绝的任务。
处理任务的少时:
当线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止。这样,线程池可以动态的调整池中的线程数。

4. 创建线程池的一些方法:

 
public static ExecutorService newFixedThreadPool(int nThreads) {
    return new ThreadPoolExecutor(nThreads,
                                nThreads,
                                0L,
                                TimeUnit.MILLISECONDS,
                                new LinkedBlockingQueue<Runnable>());    
}
public static ExecutorService newCachedThreadPool() {
    return new ThreadPoolExecutor(0,
                                Integer.MAX_VALUE,
                                60L,
                                TimeUnit.SECONDS,
                                new SynchronousQueue<Runnable>());    
}
public static ExecutorService newSingleThreadExecutor() {
    return new FinalizableDelegatedExecutorService(new ThreadPoolExecutor(1,
                                                                        1,
                                                                        0L,
                                                                        TimeUnit.MILLISECONDS,
                                                                        new LinkedBlockingQueue<Runnable>()));

 

转载于:https://www.cnblogs.com/lsx1993/p/4619973.html

线程池:ThreadPoolExecutor相关推荐

  1. Java线程池ThreadPoolExecutor使用和分析

    Java线程池ThreadPoolExecutor使用和分析(一) Java线程池ThreadPoolExecutor使用和分析(二) Java线程池ThreadPoolExecutor使用和分析(三 ...

  2. Python 线程池 ThreadPoolExecutor(二) - Python零基础入门教程

    目录 一.Python 线程池前言 二.Python 线程池 ThreadPoolExecutor 常用函数 1.线程池 as_completed 函数使用 2.线程池 map 函数使用 3.线程池 ...

  3. Python 线程池 ThreadPoolExecutor(一) - Python零基础入门教程

    目录 一.Python 线程池前言 二.Python 线程池原理 三.Python 线程池 ThreadPoolExecutor 函数介绍 四.Python 线程池 ThreadPoolExecuto ...

  4. Java线程池ThreadPoolExecutor的实例

    Java.util中的线程池和Spring框架对这个类的扩展 1.单独通过java里的ThreadPoolExecutor这个类,可以创建线程池,如果系统采用Spring框架设计,可以采用Thread ...

  5. java线程池执行器_Java线程池ThreadPoolExecutor的使用

    Java线程池ThreadPoolExecutor的使用 ThreadPoolExecutor就是我们用来实现线程的一个执行器,它实现了Excutor和ExecutorService接口.Excuto ...

  6. c++ 线程池_JAVA并发编程:线程池ThreadPoolExecutor源码分析

    前面的文章已经详细分析了线程池的工作原理及其基本应用,接下来本文将从底层源码分析一下线程池的执行过程.在看源码的时候,首先带着以下两个问题去仔细阅读.一是线程池如何保证核心线程数不会被销毁,空闲线程数 ...

  7. 线程池ThreadPoolExecutor的使用方法

    private static ExecutorService exec = new ThreadPoolExecutor(8, 8, 0L, TimeUnit.MILLISECONDS, new Li ...

  8. Java线程池—ThreadPoolExecutor

    2019独角兽企业重金招聘Python工程师标准>>> 为什么要使用线程池创建线程?     使用线程池的好处是减少在创建和销毁线程上所花的时间以及系统资源的开销,解决资源不足的问题 ...

  9. JUC(十)-线程池-ThreadPoolExecutor分析

    ThreadPoolExecutor 应用 & 源码解析 文章目录 ThreadPoolExecutor 应用 & 源码解析 一.线程池相关介绍 1.1 为什么有了JDK提供的现有的创 ...

  10. 线程池ThreadPoolExecutor使用简介

    2019独角兽企业重金招聘Python工程师标准>>> 一.简介  线程池类为 java.util.concurrent.ThreadPoolExecutor,常用构造方法为: Th ...

最新文章

  1. python数据库框架_Python数据库及ORM框架对比选择
  2. J2EE的13种核心技术
  3. mysql查询数据教程_MySQL 查询数据
  4. Entity Framework 与 LINQ to SQL
  5. html native code is rendered from xml configuration
  6. dbgrideh的功能
  7. shell:判断一个进程是否存在
  8. 求你了,听我一句劝吧,这几个玩意就别学了!
  9. SVG矢量绘图 path路径详解(贝塞尔曲线及平滑)
  10. 微软公布针对最新IE漏洞的安全通报2963983
  11. 牛客竞赛mjt的毒瘤赛
  12. 什么是搜索引擎分词技巧
  13. 使用Mediaplay类写一个播放器
  14. axure原型图手机界面尺寸
  15. Google Cloud API设计指南
  16. 如何从shutterstock下载无水印图片
  17. 用Python做一款简单的打字速度测试
  18. word转chm文件
  19. HTML禁用浏览器后退功能
  20. 将Excel中的矩阵变成列表

热门文章

  1. 共享锁+行锁防止其他事务对指定行同时更新
  2. Web网站架构设计(转)
  3. SQLite 入门教程(三)好多约束 Constraints
  4. 8.8-9 fsck、dd
  5. drf3 Serializers 序列化组件
  6. k8s的list-watch机制和 pod调度约束
  7. axis2 java.net.url_axis,axis2调用.net的webservice
  8. python index函数时间复杂度_如何确定Python中递归循环的时间复杂度?
  9. 政企边缘安全,如何助您提升企业免疫力?
  10. “我想要用我余生,换夜空繁星闪耀”