文章目录
面试官神技:“如来神掌”
请你说一下线程池的原理和使用?
提示:以下是本篇功法,记得收藏关注
见招拆招:简述概念以及优点
优点:
- 降低创建线程和销毁线程的性能开销。
- 提高响应速度,当有新任务需要执行是不需要等待线程创建就可以 立马执行。
- 合理的设置线程池大小可以避免因为线程数过多消耗CPU资源。
见龙在田:究其结构与使用规范
1.uml类图结构:
①Executor:可以看到最顶层是 Executor 的接口。这个接口很简单,只有一个 execute 方法。此接口的目的是为了把任务提交和任务执行解耦。
②ExecutorService:这还是一个接口,继承自 Executor,它扩展了 Executor 接口,定义了更多线程池相关的操作。
③AbstractExecutorService:提供了 ExecutorService 的部分默认实现。
④ThreadPoolExecutor:实际上我们使用的线程池的实现是 ThreadPoolExecutor。它实现了线程池工作的完整机制。也是我们接下来分析的重点对象。
⑤ForkJoinPool:和ThreadPoolExecutor都继承自AbstractExecutorService,适合用于分而治之,递归计算的算法
⑥ScheduledExecutorService:这个接口扩展了ExecutorService,定义个延迟执行和周期性执行任务的方法。
⑦ScheduledThreadPoolExecutor:此接口则是在继承 ThreadPoolExecutor 的基础上实现 ScheduledExecutorService 接口,提供定时和周期执行任务的特性。
2.创建线程池的主要使用
通过阿里的开发手册我们看到因为允许的阻塞队列的长度为Integer.MAX_VALUE,所以会出现OOM的问题,我们还是使用ThreadPoolExecutor构造方法进行线程池的创建。
<