1.创建线程池
线程池一共有七个关键词
corePoolSize:线程核心数,即默认数量
maximumPoolSize:请求过多,队列满时可以支持的最大线程数
keepAliveTime: maximumPoolSize中多余线程可以空闲存活的最长时间
unit:存活时间的时间单位
workQueue:是阻塞队列,也是超过corePoolSize线程数量的任务暂时存放的地方
ThreadFactory:创建线程的方式,可以创建出来的线程进行一些参数的改动
RejectedExecutionHandler:拒绝策略,当阻塞队列满且超过了maximumPoolSize线程数量执行的策略
2.提交任务
首先会判断当前线程数是否达到最大corePoolSize的连接数,如果不是,则加入线程中执行,否则判断阻塞队列是否为满,如果没满,则加入至阻塞队列,否则,检查线程数是否达到maximumPoolSize,如果没达到,则新开一个线程来执行任务,否则,就采用拒绝策略,拒绝策略分为四种:
1.抛出异常
2.丢弃该任务
3.将最先加入的任务删除并加入到队头
4.让调用线程池的线程来执行该任务