码迷,mamicode.com
首页 > 编程语言 > 详细

并发编程004 --- 线程池

时间:2019-10-05 18:29:36      阅读:82      评论:0      收藏:0      [点我收藏+]

标签:run   优先级   应用   大小   个数   处理过程   card   and   ble   

什么是线程池

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

标签:run   优先级   应用   大小   个数   处理过程   card   and   ble   

原文地址:https://www.cnblogs.com/sniffs/p/11625137.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!