并发编程004 --- 线程池

什么是线程池

线程池是一种多线程的实现形式,处理过程中,将任务添加到队列,在创建线程后自动执行,线程池中的线程使用默认优先级(5)执行

为什么使用线程池

在实际应用开发中,我们很少直接使用Thread类来创建线程,因为大量的创建和销毁线程会带来很大的系统开销

而线程池会保留核心线程,释放不常用线程,从而达到减小系统开销的效果。

线程池的创建

Exectors类提供了创建常用线程池的简便方法,有如下几种

newSingleThreadPoolExecutor 创建只有一个线程的线程池
newFixedThreadPoolExecutor 创建固定大小的线程池,入参指定
newCachedThreadPoolExecutor 创建一个大小不做限定的线程池,支持的最大线程数为Integer最大值
newScheduleThreadPoolExecutor 创建周期性执行的线程池,入参指定核心线程数,最大线程数为Integer最大值

从源码来看,这些线程池的创建无一例外调用了ThreadPoolExecutor类的构造方法

 ThreadPoolExecutor类的构造器支持7个属性

corePoolSize 线程池核心线程数,通常核心线程不会被销毁;如果指定allowCoreThreadTimeout为true,核心线程空闲超过keepAliveTime后,会被销毁;通常不建议这么做
maximumPoolSize 线程池最大线程数
keepAliveTime 线程空闲多长时间后,被销毁,一般用于非核心线程
unit 超时时间单位
workQueue 任务等待队列;如果线程池中线程个数达到最大值,并且无空闲线程,此时提交新的任务,该任务会被缓存到等待队列,直到有线程空闲
threadFactory 线程池创建新的线程使用的工厂类
handler

等待队列满了之后,新提交任务的拒绝策略,线程池提供了几种常见的策略:

AbortPolicy  -----------    抛出RejectedExecutionException,默认策略

DiscardPolicy  --------     直接丢弃

DiscardOldestPolicy ----  丢弃最先等待的任务,将新提交的任务放到等待队列中

CallerRunsPolicy  -------  使用提交任务的线程执行该任务 

猜你喜欢

转载自www.cnblogs.com/sniffs/p/11625137.html