线程池相关面试题

一、JDK自带的线程池有那些?

1.Executors.newCachedThreadPool()

创建一个可缓存的线程的线程池,若线程池长度超出需要,可回收线程,若没有可回收,则新建线程

2.Executors.newFixedThreadPool()

创建定长线程池,可控制线程最大并发数,超出的线程在队列中等待

3.Executors.newScheduledThreadPool()

创建定长线程池,支持定时和周期性任务执行

4.Executors.newSingleThreadExecutor()

创建单线程化的线程池,用唯一的线程工作,保证任务按指定顺序执行

二、线程池中核心线程数、最大线程数、缓冲任务队列的关系?

线程池的工作机制:

  • 先使用核心线程执行任务
  • 当核心线程不足时,新任务入队列等待
  • 当队列满且线程数未达最大值时,增加非核心线程执行任务
  • 当队列满且线程数已达最大值时,触发拒绝策略处理新来的任务

三、为什么阿里巴巴不推荐使用JDK自带的线程池?

  1. 资源耗尽的风险
  2. 拒绝策略不明确
  3. 线程池参数优化
  4. 监控和调试难度
    阿里巴巴推荐使用ThreadPoolExrcutor手动创建线程池,为了增强系统稳定性,降低资源耗损风险,提高开发者对线程池的控制
  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是几个可能出现在 Java 线程池相关面试中的问题: 1. 什么是线程池?为什么要使用线程池线程池是一组预先创建的线程,用于执行多个任务,以避免在每个任务中都创建线程的开销。使用线程池可以提高应用程序的性能和可伸缩性。 2. Java 中有哪些线程池实现? Java 中提供了以下线程池实现:FixedThreadPool、CachedThreadPool、SingleThreadPool、ScheduledThreadPool。 3. FixedThreadPool 和 CachedThreadPool 的区别是什么? FixedThreadPool 用于执行固定数量的任务,而 CachedThreadPool 会动态地创建线程来处理任务。CachedThreadPool 可以根据需要创建新线程,因此适用于处理许多短暂的异步任务。 4. 如何设置线程池大小? 线程池大小应根据应用程序的需求和可用资源进行设置。如果线程池大小太小,则可能会导致任务排队等待可用线程执行,从而降低应用程序的性能。如果线程池大小太大,则可能会浪费大量资源。 5. 线程池任务的执行顺序是怎样的? 线程池任务的执行顺序取决于线程池的具体实现和任务的提交顺序。在 FixedThreadPool 中,任务按照它们被提交的顺序执行。在 CachedThreadPool 中,任务的执行顺序是不确定的,因为线程池会动态地创建和销毁线程以处理任务。 6. 如何处理线程池中的异常? 可以使用 Thread.UncaughtExceptionHandler 处理线程池中的异常。该接口定义了一个方法用于处理未捕获的异常。可以在创建线程池时设置 UncaughtExceptionHandler,以便在发生异常时执行相应的操作。 7. 线程池如何处理任务队列中的任务? 线程池会按照任务队列中任务的顺序依次执行任务。如果任务队列已满,则可以将任务拒绝,并执行特定的拒绝策略。可以使用 ThreadPoolExecutor 类的 setRejectedExecutionHandler() 方法设置拒绝策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值