为什么要使用线程池?线程池参数
(一) 为什么使用线程池
1 降低资源消耗,提高线程利用率,降低创建和销毁线程的消耗
2 提高响应速度,任务来了,直接有线程可用可执行,而不是创建线程,在执行
(二) 线程池参数
1 corePoolSize :
代表的是核心线程数,也就是正常情况下创建工作的线程数,表示最大允许被创建的线程数,
比如当前任务较多,将核心线程数都用完了,还无法满足需求时,此时就会创建新的线程,
但是线程池内线程总数不会超过最大线程数
2 maxinumPoolSize:
代表的是最大线程数,它与核心线程数相对应,表示最大允许被创建的线程数,比如当前任务较多
将核心线程数都用完了,并且队列也满了,还无法满足需求时,此时就会创建新的线程,但是线程池内线程总数不会超过最大线程数。
3 keepAlive , unit:
表示超出核心线程数之外的线程的空闲存活时间,也就是核心线程不会消除,但是超出核心线程数的部分线程
如果空闲一定时间则会被消除,我们可以通过setKeepAliveTime 来设置空闲时间。
4 workQueue:
用来存放待执行的任务,假设我们现在核心线程都已被使用,还有任务进来则全部放入队列,直到整个队列被放满
但任务还再持续进入则会开始创建新的线程,直到数量到最大线程数。
5 ThreadFactory:
实际上是一个线程工厂,用来生产线程执行任务。我们可以选择使用默认的创建工厂,产生的线程都在同一个组内,拥有
相同的优先级,且都不是守护线程。当然我们也可以选择自定义线程工厂,一般我们会根据业务来指定不同的线程工厂。
6 Handler :
任务拒绝策略,有两种情况,第一种是当我们调用shutdown等方法关闭线程池后,这时候即使线程池内部还没有执行完的任务
但是由于线程池已经关闭,我们再继续想线程池提交任务就会遭到拒绝。另一种情况就是达到最大线程数,线程池已经没有能力
继续处理新提交的任务时,这时也拒绝。
坚持学习 !!