并发编程004 --- 线程池
Posted sniffs
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程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 ------- 使用提交任务的线程执行该任务
|
以上是关于并发编程004 --- 线程池的主要内容,如果未能解决你的问题,请参考以下文章