【Java八股-第五期】线程池 - Java基础

提纲:

基础八股知识🔥

  • 参数

    • corePoolSize

    • maximumPoolSize

    • keepAliveTime

    • BlockingQueue

    • TimeUnit

    • ThreadFactory

    • handler

  • 获取方式

  • 工作原理

  • 优点

  • 使用场景

面试八股真题🎈

  • 1、常用的线程池有哪些

  • 2、简述一下你对线程池的理解

  • 3、线程池核心线程数怎么设置

  • 4、Java线程池中队列常用类型有哪些

  • 5、线程安全需要保证几个基本特征

  • 6、线程池原理知道吗?以及核心参数

  • 7、线程池的拒绝策略有哪些

一、基础八股知识点

1. 参数

  • corePoolSize:

    • 核心线程数,即工作线程数

  • maximumPoolSize:

    • 最大线程数,最大线程数 - 核心线程数 = 救急线程数

  • keepAliveTime:

    • 救急线程的存活时间

  • BlockingQueue:

    • 阻塞队列,用来存放任务对象

    • 种类:

      • ArrayBlockingQueue:数组实现的阻塞队列,有存储上限

      • LinkedBlockingQueue:双向链表实现的阻塞队列,没有容量上限

      • SychronizedBlockingQueue:特殊的阻塞队列,容量为 0,即一个生产者想放入任务时,必须有一个消费者可以取

      • PriorityBlockingQueue:优先级等待队列,根据任务的优先级大小排序,每次取出堆顶的任务,没有容量限制

  • TimeUnit:

    • 存活时间的单位

  • ThreadFactory:

    • 用来创建工作线程

  • handler:拒绝策略

    • 默认为抛出异常,并丢弃该任务

    • 交还给生产者线程自己执行

    • 替换阻塞队列中队头的任务

    • 直接丢弃该任务

2.获取方式

  • 使用 ThreadPoolExcutor 自己传入参数获取一个标准的线程池

  • 使用 Excutors 获取特定功能的线程池,如 ScheduledThreadPool 提供延时和定时执行功能的线程池

3.工作原理

  • 生产者线程调用 excute 方法传入 Runable 的对象提交任务

  • 线程池收到任务对象,判断当前工作线程数是否小于核心线程数,若小于,创建工作线程并执行,工作线程会不断从阻塞队列中获取任务进行执行

  • 若工作线程已经达到核心线程数,将任务放入阻塞队列

  • 若阻塞队列使用的 ArrayBlockingQueue,会有存储上限,若达到存储上限,判断当前线程数是否大于最大线程数,若不大于,创建救急线程处理任务

  • 救急线程处理完任务后,若没有到达销毁救急线程的时间,就会不断从阻塞队列中获取任务并执行

  • 若当前线程数到达最大线程数,即救急线程也不够用了,就调用 handler 拒绝策略的具体方法

4.优点

  • 当存在大量任务时,为每一个任务创建一个线程不仅无法提高执行效率,还会增加创建和销毁线程的大量额外开销,使用线程池体现了享元的思想,使线程可以反复使用

  • 在任务传入线程池时,不需要等待创建线程即可执行,提高了速度

5.使用场景

  • 定时发送邮件

  • 定时心跳检测

二、面试八股真题🎈🎈🎈

1、常用的线程池有哪些

  • newSingleThreadExecutor:创建一个单线程的线程池,此线程池保证所有任务的执行顺序按照任务的提交顺序执行。

  • newFixedThreadPool:创建固定大小的线程池,每次提交一个任务就创建一个线程,直到线程达到线程池的最大大小。

  • new

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

代码鹿のJAVA八股面试题总结 文章被收录于专栏

【📫专栏目录在最底部📫】 - 本专栏适合于JAVA已经入门的学生或人士,有一定的编程基础。 - 本专栏特点: 本专刊囊括了JAVA、Spring、计算机网路、操作系统、计算机网络、MySQL、算法与数据结构、中间件等一系列知识点,总结出了高频面试考点(附有答案),事半功倍,为大家春秋招助力。 - 本专栏内容分为五章

全部评论
常用的线程池重复了 最后一个应该是这个吧SingleThreadScheduledExecutor(单一定时线程池)
点赞 回复 分享
发布于 2022-07-30 15:36
你好,我在阅读的过程中发现你这里面的一些问题,对此可以进行一些维护吗,正如楼上所提常用线程池里重复最后一个了。
点赞 回复 分享
发布于 2023-02-20 20:43 河南

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务