线程池的作用:
线程池是为突然大量爆发的线程设计的,通过有限的几个固定线程为大量的操作进行服务,减少了创建和销毁线程所需的时间,从而提高效率。
使用线程池的优点:
1.降低资源消耗
2.提高响应速度
3.提高线程的可管理性
线程池的原理:
1.如果当前线程池中的线程数目小于corePoolSize(线程池核心线程大小),则每来一个任务,就会创建一个线程去执行这个任务。
2.如果当前线程池中的线程数目>=corePoolSize,则每来一个任务,会尝试将其添加到任务缓存队列中,若添加成功,则该任务会等待空闲线程将其去出去执行,若添加失败(一般来说是任务缓存队列已满),则会尝试创建新的线程去执行这个任务。
3.如果队列已经满了,则在总线程数不大于maximumPoolSize(线程最大数量)的前提下,则创建新的线程;
4.如果当前线程池中的 线程数目达到maximunPoolSize,则会采取任务拒绝策略进行处理;
5.如果线程池中的线程数量大于corePoolSize时,如果某线程空闲时间超过keepAliveTime(线程存活时间单位),线程将被终止,直至线程池中的线程数目不大于corePoolSize;
如果允许为核心池中的线程设置存活时间,那么核心池中的线程空闲时间超过keepAliveTime,线程也会被终止;
线程池的拒绝策略:当最大线程数+队列缓存数量 小于 线程数量的时候,程序运行出错,被拒绝。
线程池创建的四种方式:
1。newCachedThreanPool 创建一个可缓存线程池,如果线程池长度超过处理需要,可灵活回收空闲线程,若无回收,则新建线程。
2.newFixedThreadPool 创建一个定长线程池。可控制最大并发数,超出的线程会在队列中等待。
3.newScheduledThreadPool 创建一个定长线程池,支持定时及周期性任务执行。
4.newSingleThreadExecutor 创建一个单线程化的线程池,他只会用唯一的工作线程来执行任务,保证所有任务按照指定顺序(FIFO、LIFO、优先级)执行