1. 核心线程池(corePoolSize)
核心线程大小,线程池中维护一个最小的线程数量,即使这些线程处于空闲状态,也一直存在池中,除非设置了核心线程超时时间
2. 最大线程数量(maximunPoolSize)
线程池中允许的最大线程数量。当线程池中核心线程都处理执行状态,有新请求的任务时:
①工作队列未满:新请求的任务加入工作队列
②工作队列已满:线程池会创建新线程,来执行这个任务(受到maximunPoolSize的限制)
3. 空闲线程存活时间(keepAliveTime)
当线程数大于核心线程数时,空闲线程在等待新任务到达的最大时间,如果超过这个时间还没有任务请求,该空闲线程就会被销毁。
4. 存活时间单位(unit)
keepAliveTime的计量单位,枚举类型TimeUnit类
5. 工作队列(workQueue)
①基于数组的有界阻塞队列,FIFO
②基于链表的无界阻塞队列,FIFO
③优先级无界阻塞队列,通过参数Comparator实现对任务进行排序实现优先级,不按照FIFO执行
④不缓存任务的阻塞队列
6. 线程工厂(threadFactory)
创建一个新线程时使用的工厂,可以用来设定线程名、是否为daemon线程等;官方使用默认的线程工厂DefaultThreadFactory(implements ThreadFactory)
7. 拒绝策略(handler)
Java 并发超出线程数和工作队列时候的任务请求处理策略,使用了策略设计模式
策略①:AbortPolicy(默认) - 抛出异常,中止任务
该处理在拒绝时抛出RejectedExecutionException,拒绝执行。
策略②:CallerRunsPolicy - 使用调用线程执行任务
调用 execute 方法的线程本身运行任务
策略③:DiscardOldestPolicy - 丢弃队列最老任务,添加新任务
如果执行程序未关闭,则删除工作队列头部的任务,然后重试加入新任务
策略④:DiscardPolicy - 直接丢弃,其他啥都没有
无法执行的任务被简单地删除,将会丢弃当前任务,通过源码可以看出,该策略不会执行任务操作