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
  • 相关阅读:
    命令行界面下用户和组管理之groupadd的使用
    vue数据更新UI不刷新显示解决方案
    传入函数作为string.replace方法的第二个参数应用
    CSS 黑魔法-css控制图标颜色
    谈谈Web Components
    js函数组合
    “平滑滚动”效果骚操作
    BFC布局解析
    关于js构造函数return的一些解惑
    关于setTimeout和setInterval你不知道的事
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/10801200.html
Copyright © 2011-2022 走看看