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
  • 相关阅读:
    12月14日 bs-grid , destroy_all()
    12月13日 什么是help_method,session的简单理解, find_by等finder method
    12月10日 render( locals:{...}) 传入本地变量。
    12月8日 周五 image_tag.
    12月7日,几个错误,拼写错误,遗漏符号:,记忆有误,max-width的作用。gem mini_magick, simple_form
    程序员必读之软件架构
    先进PID控制MATLAB仿真(第4版)
    中文版Illustrator CS6基础培训教程(第2版)
    Android系统级深入开发——移植与调试
    Excel在会计与财务管理中的应用
  • 原文地址:https://www.cnblogs.com/xkzhangsanx/p/10801200.html
Copyright © 2011-2022 走看看