019--线程池之ThreadPoolExecutor+面试题

VIP免费
2024-12-11 1 0 60.33KB 7 页 5.9玖币
侵权投诉
线程池之 ThreadPoolExecutor + 面试题
线程池介绍
线程池(Thread Pool):把一个或多个线程通过统一的方式进行调度和重复使用的技
术,避免了因为线程过多而带来使用上的开销。
为什么要使用线程池?
可重复使用已有线程,避免对象创建、消亡和过度切换的性能开销。
避免创建大量同类线程所导致的资源过度竞争和内存溢出的问题。
支持更多功能,比如延迟任务线程池(newScheduledThreadPool)和缓存线程池
newCachedThreadPool)等。
线程池使用
创建线程池有两种方式:ThreadPoolExecutor Executors ,其中 Executors 又可以创建 6
种不同的线程池类型,会在下节讲,本节重点来看看 ThreadPoolExecutor 的使用。
ThreadPoolExecutor 的使用
线程池使用代码如下:
ThreadPoolExecutor threadPoolExecutor = new ThreadPoolExecutor(2, 10, 10L,
TimeUnit.SECONDS, new LinkedBlockingQueue(100));
threadPoolExecutor.execute(new Runnable() {
@Override
public void run() {
// 执行线程池
System.out.println("Hello, Java.");
}
});
以上程序执行结果如下:
Hello, Java.
ThreadPoolExecutor 参数说明
ThreadPoolExecutor 构造方法有以下四个,如下图所示:
enter image description here
其中最后一个构造方法有 7 个构造参数,包含了前三个方法的构造参数,这 7 个参数名称
如下所示:
public ThreadPoolExecutor(int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler) {
//...
}
其代表的含义如下:
① corePoolSize
线程池中的核心线程数,默认情况下核心线程一直存活在线程池中,如果将
ThreadPoolExecutor allowCoreThreadTimeOut 属性设为 true,如果线程池一直闲置并
超过了 keepAliveTime 所指定的时间,核心线程就会被终止。
② maximumPoolSize
线程池中最大线程数,如果活动的线程达到这个数值以后,后续的新任务将会被阻塞(放
入任务队列)。
③ keepAliveTime
线程池的闲置超时时间,默认情况下对非核心线程生效,如果闲置时间超过这个时间,非
核心线程就会被回收。如果 ThreadPoolExecutor allowCoreThreadTimeOut 设为 true
的时候,核心线程如果超过闲置时长也会被回收。
④ unit
配合 keepAliveTime 使用,用来标识 keepAliveTime 的时间单位。
⑤ workQueue
线程池中的任务队列,使用 execute() submit() 方法提交的任务都会存储在此队列中。
⑥ threadFactory
为线程池提供创建新线程的线程工厂。
⑦ rejectedExecu%onHandler
线程池任务队列超过最大值之后的拒绝策略,RejectedExecutionHandler 是一个接口,里
面只有一个 rejectedExecution 方法,可在此方法内添加任务超出最大值的事件处
理。ThreadPoolExecutor 也提供了 4 种默认的拒绝策略:
new ThreadPoolExecutor.DiscardPolicy():丢弃掉该任务,不进行处理
new ThreadPoolExecutor.DiscardOldestPolicy():丢弃队列里最近的一个任务,并执
行当前任务
new ThreadPoolExecutor.AbortPolicy() :直接抛出 RejectedExecutionException 异常
摘要:

线程池之ThreadPoolExecutor+面试题线程池介绍线程池(ThreadPool):把一个或多个线程通过统一的方式进行调度和重复使用的技术,避免了因为线程过多而带来使用上的开销。为什么要使用线程池?•可重复使用已有线程,避免对象创建、消亡和过度切换的性能开销。•避免创建大量同类线程所导致的资源过度竞争和内存溢出的问题。•支持更多功能,比如延迟任务线程池(newScheduledThreadPool)和缓存线程池(newCachedThreadPool)等。线程池使用创建线程池有两种方式:ThreadPoolExecutor和Executors,其中Executors又可以创建6种不同...

展开>> 收起<<
019--线程池之ThreadPoolExecutor+面试题.docx

共7页,预览2页

还剩页未读, 继续阅读

声明:本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。玖贝云文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知玖贝云文库,我们立即给予删除!
分类:计算机 价格:5.9玖币 属性:7 页 大小:60.33KB 格式:DOCX 时间:2024-12-11

开通VIP享超值会员特权

  • 多端同步记录
  • 高速下载文档
  • 免费文档工具
  • 分享文档赚钱
  • 每日登录抽奖
  • 优质衍生服务
/ 7
客服
关注