1.什么是线程池?
答:线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。
通俗点将,线程池就是一个容器,集中管理线程。线程使用完毕不会销毁,而是会先存储在线程池内。
2.线程池的作用?
答:1.降低资源消耗。
2.提高响应速度。
3.提高线程的可管理性。
3.常见的线程池有哪几种?
答:有四种。
1.newCachedThreadPool 创建一个可缓存的线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无可回收,则新建线程。
2.newFixedThreadPool 创建一个定长线程池,可控制最大并发数,超出的线程将在队列中等待。
3.newScheduledThreadPool 创建一个定时线程池,支持定时及周期性的执行任务。
4.newSingleThreadExecutor 创建一个单线程化的线程池,它只会用唯一的工作线程来执行任务,保证所有的任务按照指定顺序执行(FIFO,LIFO)
4.ThreadPoolExecutor实现线程池的主要参数?
参数具体含义参考此文:https://blog.youkuaiyun.com/jiao1902676909/article/details/105740850
答:1.corePoolSize:核心线程数。
2.maximumPoolSize:最大线程数。
3.keepAliveTime:线程空闲时间。线程空闲时间达到keepAliveTime时,线程会退出,直到线程数量=corePoolSize;如果参数allowCoreThreadTimeout=true,则会直到线程数量=0;
4.unit:keepAliveTime的单位
5.workQueue:线程池中的任务队列。常用的有SynchronousQueue、LinkedBlockingDeque、ArrayBlockingQueue。
6.threadFactory:线程工厂。
7.RejectedExecutionHandler:拒绝策略。
a.AbortPolicy 丢弃任务,抛运行时异常(默认)
b. CallerRunsPolicy 执行任务
c.DiscardPolicy 忽视,什么都不会发生
d.DiscardOldestPolicy 从队列中踢出最先进入队列(队列最前面)的任务
5.线程池原理剖析?
答:
1.如果当前线程池中的线程数目小于corePoolSize,则每来一个任务就会去创建一个线程去执行。
2.如果当前线程池中线程数大于corePoolSize,则每来一个任务就会添加到缓存队列。
3.添加成功,则该任务会等待空闲线程将其取出执行。若添加失败,则会创建新的线程进行执行。
4.如果队列已满,则在总线程数小于maximumPoolSize的前提下,则创建新的线程。
5.如果当前线程池中的线程数达到了maximunPoolSize,则再来新的任务,则执行拒绝策略。
6.如果线程池中的线程数量大于 corePoolSize时,如果某线程空闲时间超过keepAliveTime,线程将被终止,直至线程池中的线程数目不大于corePoolSize;如果允许为核心池中的线程设置存活时间,那么核心池中的线程空闲时间超过keepAliveTime,线程也会被终止。
6.如何合理的配置线程池?
参考此文:https://blog.youkuaiyun.com/jiao1902676909/article/details/105617366