zoukankan      html  css  js  c++  java
  • Java线程池定制ThreadPoolExecutor官方定制实例

    1.仍然先看构造方法:ThreadPoolExecutor构造方法

    public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit,
            BlockingQueue<Runnable> workQueue,ThreadFactory threadFactory,RejectedExecutionHandler handler);
    corePoolSize:核心池的大小;
    maximumPoolSize:线程池最大线程数;
    keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止;
    unit:参数keepAliveTime的时间单位(TimeUnit);
    workQueue:一个阻塞队列,用来存储等待执行的任务;
    threadFactory:线程工厂,主要用来创建线程;
    handler:表示当拒绝处理任务时的策略,有以下四种取值:
    (1)AbortPolicy丢弃任务并抛出RejectedExecutionException异常,默认策略
    (2)DiscardPolicy:也是丢弃任务,但是不抛出异常
    (3)DiscardOldestPolicy:丢弃队列最前面的任务,然后重新尝试执行任务
    (4)CallerRunsPolicy:由调用线程处理该任务(不创建新线程)
     
    2.官方定制Executors定制
    (1)newSingleThreadExecutor()源码
        public static ExecutorService newSingleThreadExecutor() {
            return new FinalizableDelegatedExecutorService
                (new ThreadPoolExecutor(1, 1,
                                        0L, TimeUnit.MILLISECONDS,
                                        new LinkedBlockingQueue<Runnable>()));
        }

    通过源码可以看到:

    corePoolSize:核心池的大小=1
    maximumPoolSize:线程池最大线程数=1
    keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止=0
    unit:参数keepAliveTime的时间单位(TimeUnit)=MILLISECONDS(毫秒)
    workQueue:一个阻塞队列,用来存储等待执行的任务=LinkedBlockingQueue队列
    threadFactory:线程工厂,主要用来创建线程:没有写出,使用默认工厂类
    handler:表示当拒绝处理任务时的策略,有以下四种取值:没有写出,使用AbortPolicy策略
     
     
    (2)newFixedThreadPool(int nThreads)源码
        public static ExecutorService newFixedThreadPool(int nThreads) {
            return new ThreadPoolExecutor(nThreads, nThreads,
                                          0L, TimeUnit.MILLISECONDS,
                                          new LinkedBlockingQueue<Runnable>());
        }

    通过源码可以看到:

    corePoolSize:核心池的大小=nThreads
    maximumPoolSize:线程池最大线程数=nThreads
    keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止=0
    unit:参数keepAliveTime的时间单位(TimeUnit)=MILLISECONDS(毫秒)
    workQueue:一个阻塞队列,用来存储等待执行的任务=LinkedBlockingQueue队列
    threadFactory:线程工厂,主要用来创建线程:没有写出,使用默认工厂类
    handler:表示当拒绝处理任务时的策略,有以下四种取值:没有写出,使用AbortPolicy策略
     
     
    (3)newCachedThreadPool()源码
        public static ExecutorService newCachedThreadPool() {
            return new ThreadPoolExecutor(0, Integer.MAX_VALUE,
                                          60L, TimeUnit.SECONDS,
                                          new SynchronousQueue<Runnable>());
        }

    通过源码可以看到:

    corePoolSize:核心池的大小=0
    maximumPoolSize:线程池最大线程数=Integer.MAX_VALUE(2147483647)
    keepAliveTime:表示线程没有任务执行时最多保持多久时间会终止=60
    unit:参数keepAliveTime的时间单位(TimeUnit)=SECONDS(秒)
    workQueue:一个阻塞队列,用来存储等待执行的任务=SynchronousQueue队列
    threadFactory:线程工厂,主要用来创建线程:没有写出,使用默认工厂类
    handler:表示当拒绝处理任务时的策略,有以下四种取值:没有写出,使用AbortPolicy策略
    寻找撬动地球的支点(解决问题的方案),杠杆(Java等编程语言)已经有了。xkzhangsan
  • 相关阅读:
    Activity工作流(2)-入门安装运行第一个例子
    三分钟明白 Activiti工作流 -- java运用
    java 实现一套流程管理、流转的思路(伪工作流) 【仅供参考】
    jquery 的 each 方法中 return 的坑
    js判断数组里是否有重复元素的方法
    JFreeChart工具类
    JQuery中$.each 和$(selector).each()的区别详解
    echarts彩虹柱状图 每个bar显示不同颜色, 标题在不同位置 ,工具中有可以直接保存为图片下载,平均线的添加
    poi导出word表格详解 超详细了
    java使用POI操作XWPFDocument中的XWPFRun(文本)对象的属性详解
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/10801200.html
Copyright © 2011-2022 走看看