面试阿里问到线程池的问题,“对不起,我学习过这篇线程池讲解,斩神行动开始”


面试官神技:“如来神掌”

请你说一下线程池的原理和使用?

提示:以下是本篇功法,记得收藏关注

见招拆招:简述概念以及优点

优点:

  1. 降低创建线程和销毁线程的性能开销
  2. 提高响应速度,当有新任务需要执行是不需要等待线程创建就可以 立马执行。
  3. 合理的设置线程池大小可以避免因为线程数过多消耗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构造方法进行线程池的创建。

<
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值