一:什么是线程池?为什么要使用线程池?
是一个管理线程的池子,它可以容纳多个线程,其中的线程可以反复利用,省去了频繁创建线程对象的操作。
好处:(1)降低资源消耗,降低频繁创建、销毁线程带来的额外开销。
(2)降低使用复杂度。将任务的提交和执行进行解耦,我们只需要创建一个线程池,然后往里面提交任务就行,具体执行流程由线程池自己管理。
二:ThreadPoolExecutor 都有哪些核心参数?
corePoolSize 核心线程数目 (最多保留的线程数)
maximumPoolSize 最大线程数目
keepAliveTime 生存时间 - 针对救急线程
unit 时间单位 - 针对救急线程
workQueue 阻塞队列
threadFactory 线程工厂 - 可以为线程创建时起个好名字
handler 拒绝策略
在创建线程池后,等待提交过来的任务请求,当调用execute()方法添加任务时,线程池会做如下判断:
(1)当任务数没有超过 coreSize 时,新建一个线程来处理提交的任务;
(2)如果任务数超过 coreSize 时,加入任务队列暂存;
(3)如果任务队列满了且正在运行的线程数量小于最大线程数,那么创建一个非核心线程立刻运行这个任务;
(4)如果任务队列满了且正在运行的线程数量大于或等于最大线程数,线程池会执行