线程池的参数
corePoolSize //核心线程数
maximumPoolSize //最大线程数
keepAliveTime //最大存活时间
unit //keepAliveTime的时间单位
workQueue //工作队列
threadFactory //线程工厂
handler //拒绝策略
其中可以被配置的有六个:
corePoolSize
核心线程数,线程池中会一直保持活跃的线程数。
maximumPoolSize
最大线程数,线程池先判断阻塞队列是否已经满了,如果满了,会在核心线程数的基础上创建新线程,直到线程数达到最大线程数。
keepAliveTime
空闲线程的存活时间,线程池执行完任务之后,除了核心线程,剩下的线程会保持设置的keepAliveTime时间等待,如果到时间了还是没有任务进来,这时候空闲的线程就会关闭。
workQueue
工作队列,即线程队列,是一个阻塞队列。jdk中提供了四种工作队列:
- ArrayBlockingQueue
基于数组的阻塞队列 - LinkedBlockingQuene
基于链表的阻塞队列 - SynchronousQuene
不缓存任务的阻塞队列 - PriorityBlockingQueue
具有优先级的无界阻塞队列
threadFactory
线程工厂,用于创建线程
handler
线程被拒绝后的策略
- CallerRunsPolicy
该策略下,被拒绝的任务,由[调用execute方法的线程]来执行被拒绝的任务(哪个线程调用了execute方法,那么这个线程来执行被拒绝的任务) - AbortPolicy
该策略下,直接丢弃任务,并抛出RejectedExecutionException异常 - DiscardPolicy
该策略下,直接丢弃任务。 - DiscardOldestPolicy
该策略下,抛弃进入工作队列最早的那个任务,然后把被拒绝的任务放入工作队列