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
  • 相关阅读:
    多个类定义attr属性重复的问题:Attribute "xxx" has already been defined
    好用的批量改名工具——文件批量改名工具V2.0 绿色版
    得到ImageView中drawable显示的区域的计算方法
    得到view坐标的各种方法
    实现类似于QQ空间相册的点击图片放大,再点后缩小回原来位置
    Material Designer的低版本兼容实现(五)—— ActivityOptionsCompat
    Android 自带图标库 android.R.drawable
    解决 Attempting to destroy the window while drawing!
    解决Using 1.7 requires compiling with Android 4.4 (KitKat); currently using API 4
    Material Designer的低版本兼容实现(四)—— ToolBar
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/10801200.html
Copyright © 2011-2022 走看看