线程池的分类:
线程池的生命周期:
1.线程池有两种生命状态
执行状态
结束状态
从 RUNNING 到 TERMINATED 有两种状态,
中间有三个参数
选择 SHUTDOWN 就变成 如果核心线程30个,需要执行的任务50,30个任务在核心线程中,剩下20个在阻塞队列中,等核心线程中的30个执行完毕,执行阻塞队列中的20个任务然后走到执行状态
选择 STOP 就变成直接全部杀死进入执行状态
推荐使用 第一种
corePoolSize 核心线程数
maximumPoolSize 最大线程数
keepAilveTime 存活时间
unit 指定存活时间的时间单位
workQueue 缓存队列
threadFactory 生产多线程的工厂模式
handler 拒绝策略
拒绝策略
ThreadPoolExecutor.AbortPolicy:丢弃任务,并且抛出认为
ThreadPoolExecutor.DiscardPolicy:也是丢弃任务,但是不抛
出异常。
ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的
任务,然后重新尝试执行任务
ThreadPoolExecutor.CallerRunsPolicy:由调用线程处理该任务
重复此过程)
阻塞队列
ArrayBlockingQueue
LinkedBlockingQueue
DelayQueue
PriorityBlockingQueue
SynchronousQueue
线程池的关闭
关闭线程池,可以通过shutdown和shutdownNow两个方法
1.shutdown只是将线程池的状态设置为SHUTDOWN状态,然
后中断所有没有正在执行任务的线程,先进行一点一点执行结束
2.shutdownNow直接进行关闭,不管有多少线程,就直接进行关闭