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
  • 相关阅读:
    Coded UI Test(二)创建一个Coded UI Test
    Coded UI Test(一)概述
    面向接口编程思想与实现可维护的代码 (一)
    KMP算法字符串模式匹配算法
    新的博客,新的起点
    第十三章:字符串 《Thinking in java》学习笔记
    稀疏矩阵三元组表来压缩存储及转置
    eclipse svn的使用+小组开发
    第十一章:持有对象 《Thinking in java》学习笔记
    双端队列(deque)课堂跳了的内容
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/10801200.html
Copyright © 2011-2022 走看看