美团面试题

本文详细介绍了Java面试中常见的技术问题,包括线程池的实现方式及其参数含义,锁升级的过程,以及设计模式的应用。深入探讨了synchronized锁升级的四个阶段,强调了ConcurrentHashMap与HashMap的区别,并阐述了@Autowired和@Resource在Spring中的差异。此外,还讨论了设计模式中的工厂模式、单例模式、代理模式等,以及Redis的高性能原因。最后,讨论了MySQL索引的种类和优化策略。
摘要由CSDN通过智能技术生成

1.线程池有几种实现方式?

线程池的创建方法总共有 7 种,但总体来说可分为 2 类:通过 ThreadPoolExecutor 创建的线程池;通过 Executors 创建的线程池。
在这里插入图片描述

线程池的创建方式总共包含以下 7 种(其中 6 种是通过 Executors 创建的,1 种是通过 ThreadPoolExecutor 创建的):

  • Executors.newFixedThreadPool:创建一个固定大小的线程池,可控制并发的线程数,超出的线程会在队列中等待;
  • Executors.newCachedThreadPool:创建一个可缓存的线程池,若线程数超过处理所需,缓存一段时间后会回收,若线程数不够,则新建线程;
  • Executors.newSingleThreadExecutor:创建单个线程数的线程池,它可以保证先进先出的执行顺序;
  • Executors.newScheduledThreadPool:创建一个可以执行延迟任务的线程池;
  • Executors.newSingleThreadScheduledExecutor:创建一个单线程的可以执行延迟任务的线程池;
  • Executors.newWorkStealingPool:创建一个抢占式执行的线程池(任务执行顺序不确定)【JDK 1.8 添加】。
  • ThreadPoolExecutor:最原始的创建线程池的方式,它包含了 7 个参数可供设置,会更加可控。

2.线程池的参数含义?

问到线程池参数的含义,一定是问 ThreadPoolExecutor 参数的含义,这七个参数的含义分别是: 7 个参数代表的含义如下:

  1. corePoolSize核心线程数,线程池中始终存活的线程数。

  2. 参数 2:maximumPoolSize最大线程数,线程池中允许的最大线程数,当线程池的任务队列满了之后可以创建的最大线程数。

  3. 参数 3:keepAliveTime最大线程数可以存活的时间,当线程中没有任务执行时,最大线程就会销毁一部分,最终保持核心线程数量的线程。

  4. 参数 4:unit:单位是和参数 3 存活时间配合使用的,合在一起用于设定线程的存活时间 ,参数 keepAliveTime 的时间单位有以下 7 种可选:

  • TimeUnit.DAYS:天
  • TimeUnit.HOURS:小时
  • TimeUnit.MINUTES:分
  • TimeUnit.SECONDS:秒
  • TimeUnit.MILLISECONDS:毫秒
  • TimeUnit.MICROSECONDS:微妙
  • TimeUnit.NANOSECONDS:纳秒
  1. 参数 5:workQueue一个阻塞队列,用来存储线程池等待执行的任务,均为线程安全,它包含以下 7 种类型:
  • ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列;
  • LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列;
  • SynchronousQueue:一个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

IT界的一只菜鸟

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值