线程池是什么,它的核心参数都有什么,有什么作用?
线程池的作用打个比方来说: 就像是一个共享充电区,里面放着很多共享充电宝,当一堆人充完电后,再把充电宝还回去,这样有借有还,就保证了即使是5个充电宝也能供给很多人使用。线程池就是这么个意思,它的作用就是优化线程的管理和使用,减少在创建和销毁线程过程中的开销。
线程池有七个参数(部分参数作用会在下面一起配合线程池工作流程一起说):
- corePoolSize 核心线程数目
- maximumPoolSize 最大线程数目:最大线程数目 = 核心线程 + 非核心线程(救急线程)。
- unit 时间单位:非核心线程(救急线程)的生存时间单位,如:秒、毫秒等。
- keepAliveTime 生存时间:非核心线程(救急线程)的生存时间,如果在生成时间内没有新的任务,就会释放非核心线程(救急线程)。
- workQueue 阻塞队列:当没有空闲的核心线程时,新加入的任务会被放进阻塞队列中,如果阻塞队列也满了,再新来的任务会使用非核心线程(救急线程)执行任务。
- threadFactory 线程工厂:可以设置线程名字,线程工作性质。
- handler 拒绝策略:当所有线程(核心线程和非核心线程)都在工作时,阻塞队列也放满了,会触发拒绝策略。
- AbortPolicy:直接抛出异常(默认策略)。
- CallerRunsPolicy:用调用者所在的线程来执行任务。意思就是如果是main方法,就用main来执行任务。
- DiscardOldestPolicy:丢弃阻塞队列中靠最前的任务,并执行当前任务。
- DiscardPolicy:直接丢弃任务。
线程池工作流程: