一、JDK自带的线程池有那些?
1.Executors.newCachedThreadPool()
创建一个可缓存线程的线程池,若线程池长度超出需要,可回收线程,若没有可回收,则新建线程
2.Executors.newFixedThreadPool()
创建定长线程池,可控制线程最大并发数,超出的线程在队列中等待
3.Executors.newScheduledThreadPool()
创建定长线程池,支持定时和周期性任务执行
4.Executors.newSingleThreadExecutor()
创建单线程化的线程池,用唯一的线程工作,保证任务按指定顺序执行
二、线程池中核心线程数、最大线程数、缓冲任务队列的关系?
线程池的工作机制:
- 先使用核心线程执行任务
- 当核心线程不足时,新任务入队列等待
- 当队列满且线程数未达最大值时,增加非核心线程执行任务
- 当队列满且线程数已达最大值时,触发拒绝策略处理新来的任务
三、为什么阿里巴巴不推荐使用JDK自带的线程池?
- 资源耗尽的风险
- 拒绝策略不明确
- 线程池参数优化
- 监控和调试难度
阿里巴巴推荐使用ThreadPoolExrcutor手动创建线程池,为了增强系统稳定性,降低资源耗损风险,提高开发者对线程池的控制