线程池ThreadPoolExecutor的介绍

线程池最常用的构造方法是

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue)

corePoolSize:池中所保存的线程数,就是核心池的大小。

maximumPoolSize:池中允许的最大线程数。

keepAliveTime:当线程数量大于corePoolSize值时,超过此时间单位的,删除。

unit: keepAliveTime参数的时间单位。

workQueue:执行用于保持任务的队列。这个参数相当重要,此参数的选择可能会影响keepAliveTime是否生效,以及与maximumPoolSize可能会共同产生对线程池的影响。

当然,最全参数的构造方法是:

ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

ThreadFactory线程可以对池中的线程进行定制化。

RejectedExecutionHandler是可以处理任务被拒绝时的行为。这个自己设置,但java api已经提供了四种不同的处理方式。

下面的policy都已经实现了RejectedExecutionHandler接口。

AbortPolicy:当任务添加到线程池中被拒绝时,它将抛出RejectedExecutionException异常(A handler for rejected tasks that throws a RejectedExecutionException.)

CallerRunsPolicy:当任务添加到线程池中被拒绝时,会使用调用线程池的Thread线程处理被拒绝的任务。

DiscardOdlestPolicy:当任务添加到线程池中被拒绝时,线程池会放弃等待队列中最旧的为处理任务,然后将被拒绝的任务天降到等待队列中。

DiscardPolicy:当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。

猜你喜欢

转载自blog.csdn.net/ploter/article/details/81592092