线程池最常用的构造方法是
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:当任务添加到线程池中被拒绝时,线程池将丢弃被拒绝的任务。