线程池:
线程池是一种多线程处理方式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务,给每个线程每次分配一个任务。每次任务结束线程进行销毁,再有新的任务新创建线程,代价极大。在线程中写一个死循环就可以一直存活,但一直占用cpu和空间。
一、创建线程的三种方式
new Thread,继承 Runnable,继承Callable
二、线程池的工作流程
三、线程池的入参(面试点)
\1. corePoolSize:核心线程数处于运行态的线程数;定义了最小可以同时运行的线程数量。
\2. maximumPoolSize:最大线程数线程池中能够容纳同时执行的最大线程数,必须>= 1\
3. keepAliveTime:过期时间,多余的空闲线程额存活时间,任务全部完成之后,最大线程数没任务的时候,超过一定时间销毁,只留下核心线程。当前池中线程数量超过corePoolSize时,当空闲时间达到keepAliveTime时,多余线程会被销毁知道只剩下corePoolSize个线程位置。
\4. unit:keepAliveTime过期时间的单位。(秒?分?天?星期?月?年?)
\5. workQueue:任务队列,被提交但尚未执行的任务。当新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中。
\6. threadFactory:表示生成线程池中工作线程的线程工厂,用于创建线程,一般默认即可。
\7. handler:拒绝策略,上面执行剩余的(装不下的)走拒绝策略;表示当队列满了,并且工作线程>=线程池的最大线程数(maximumPoolSize)
四、线程池的优点
1)降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
2)提高响应速度。当任务到达时,任务可以不需要等到线程创建就能立即执行。
3)提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。