【2023最新版本】Java全阶段面试题汇总,涵盖:初级-中级-高级!学完即可面

1.线程池的核心参数都有什么?
1.coresize 核心线程数
2.maximumsize 最大线程数
3.keepAliveTime(生存时间吗,针对救急线程)
4.unit 时间单位(针对救急线程)
5.runnableTaskQueue(任务队列)
- ArrayBlockingQueue:是一个基于数组结构的有界阻塞队列,此队列按FIFO(先进先出)原则对元素进行排序。
- LinkedBlockingQueue:一个基于链表结构的阻塞队列,此队列按FIFO排序元素,吞吐量通常要高于ArrayBlockingQueue。静态工厂方法Executors.newFixedThreadPool()使用了这个队列。
- SynchronousQueue:一个不存储元素的阻塞队列。每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态,吞吐量通常要高于Linked-
- BlockingQueue,静态工厂方法Executors.newCachedThreadPool使用了这个队列。
- PriorityBlockingQueue:一个具有优先级的无限阻塞队列。
6.threadfactory(线程工厂,起名称)
7.handle(拒绝策略)
当队列和线程池都满了,说明线程池处于饱和状态 ,那么必须采取一种策略处理提交的新任务。这个策略默认情况下是 AbortPolicy ,表示无法
处理新任务时抛出异常。在 JDK 1.5 中 Java 线 程池框架提供了以下 4 种策略:
AbortPolicy:直接抛出异常。
CallerRunsPolicy:只用调用者所在线程来运行任务。
DiscardOldestPolicy:丢弃队列里最近的一个任务,并执行当前任务。
DiscardPolicy:不处理,丢弃掉。
maximumPoolSize - corePoolSize = 救急线程数
注意 : 救急线程在没有空闲的核心线程和任务队列满了的情况才使用救急线程