线程池七大参数
- corePoolSize 核心线程数目 - 池中会保留的最多线程数
- maximumPoolSize 最大线程数目 - 核心线程+救急线程的最大数目
- keepAliveTime 生存时间 - 救急线程的生存时间,生存时间内没有新任务,此线程资源会释放
- unit 时间单位 - 救急线程的生存时间单位,如秒、毫秒等
- workQueue - 对任务起到缓冲的作用。当没有空闲核心线程时,新来任务会加入到此队列排队,队列满会创建救急线程执行任务(一般会选择一个有上限的队列)
- threadFactory 线程工厂 - 可以定制线程对象的创建,例如设置线程名字、是否是守护线程等
- handler 拒绝策略 - 当所有线程都在繁忙,workQueue 也放满时,会触发拒绝策略抛异常
- java.util.concurrent.ThreadPoolExecutor.AbortPolicy
- 由调用者执行任务 java.util.concurrent.ThreadPoolExecutor.CallerRunsPolicy(如main线程来执行新的任务)
- 丢弃任务 java.util.concurrent.ThreadPoolExecutor.DiscardPolicy
- 丢弃最早排队任务 java.util.concurrent.ThreadPoolExecutor.DiscardOldestPolicy
核心线程:当线程执行完任务之后仍然会保存在线程池中的线程(可以为0),核心线程也是懒加载,刚开始创建好线程池时核心线程为0,开始添加任务时才开始创建核心线程
救急核心线程:当线程执行完任务之后不需要保存在线程池中的线程
AbortPolicy 抛异常
CallerRunsPolicy 由调用者执行(这里是main线程执行)
DiscardPolicy 丢弃任务
DiscardOldestPolicy 丢弃任务队列中最老的任务