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策略

猜你喜欢

转载自www.cnblogs.com/xkzhangsanx/p/10801200.html