10.阻塞队列和线程池

这篇具有很好参考价值的文章主要介绍了10.阻塞队列和线程池。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

阻塞队列(BlockQueue)

  • 非阻塞方法
    • add 往满的队列中添加元素会报错
    • remove 从空的队列中移除元素会报错
    • offer 往满的队列中添加元素会返回false
    • poll 从空的队列中移除元素会返回null
  • 阻塞方法
    • put
    • take

使用场景:
阻塞队列通常使用在生产者消费者设计模式当中,生产者不用关心生成的产品由哪个消费者来执行,只需将生产的产品放入队列中,消费者直接从队列中取出产品使用,达到了生产者与消费者之间解耦的目的和性能均衡问题.

常用的阻塞队列有哪些?

  • ArrayBlockQueue 一个由数组结构组成的有界阻塞队列
  • LinkedBlockQueue 一个由链表结构组成的有界阻塞队列
  • PriorityBlockQueue 一个支持优先级排序的无界阻塞队列
  • DelayQueue 一个使用优先级排序的无界阻塞队列
  • SyschronizedQueue 一个不存储元素的阻塞队列
  • LinkedTransferQueue 一个由链表结构组成的无界阻塞队列
  • LinkedBlockQueue 一个由链表结构组成的双向阻塞队列

什么是线程池?为什么要用线程池?
线程池是用来管理线程的.
因为线程的创建、执行和销毁都是需要耗费时间和资源的,所以通过线程池来避免线程的重复创建和销毁

线程池ThreadPoolExecutor(/ɪɡˈzekjətər/)工作机制

  1. 线程池的创建 (各个参数的含义)
    public ThreadPoolExecutor(int corePoolSize, int maximumPoolSize, long keepAliveTime, TimeUnit unit, BlockingQueue<Runnable> workQueue, ThreadFactory threadFactory, RejectedExecutionHandler handler)

  2. 提交任务

    • execute(Runnable) 没有返回值
    • submit(Callable/Runnable) 有返回值,返回Future,最终还是交给execute去执行的
  3. 线程池的关闭

    • showDown 将正在执行的线程以外的线程关闭
    • showDownNow 将正在执行的线程和以外的线程都关闭

线程池中参数的含义

  • corePoolSize 核心线程数,当前可执行线程的数量
  • maximumPoolSize 最大线程数,当阻塞队列存满后,将会创建新的线程来执行任务(执行的任务是当前的任务,而非阻塞队列中的任务)
  • keepAliveTime 控制空闲线程存活时间
  • unit 控制空闲线程存活时间单位(ms、s)
  • workQueue 阻塞队列,如果要执行的线程数超过核心线程数,将会会放在阻塞队列中,阻塞队列存满后,依据最大线程数将会创建新的线程来执行任务
  • threadFactory 对创建线程做一些调节
  • handler 拒绝策略,超出线程池执行能力以外的任务拒绝执行,最多可以执行1100个线程,超过的不予执行

RejectedExecutionHandler(拒绝策略)文章来源地址https://www.toymoban.com/news/detail-442584.html

  • CallerRunsPolicy
  • AbortHandler 通常默认的拒绝策略是这一个,直接抛出异常
  • DiscardPolicy
  • DiscardOldestPolicy

到了这里,关于10.阻塞队列和线程池的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【javaEE】阻塞队列、定时器、线程池

    目录 🌴一、阻塞队列 1.概念 2.生产者消费者模型 3.阻塞队列的实现 🏹二、定时器 1.引出定时器 2.定时器的实现 🔥三、线程池 1.引出线程池 2.ThreadPoolExecutor 构造方法 3.标准数据库的4种拒绝策略【经典面试题】【重点掌握】 4.线程池的实现   1.概念 ✨对于队列,首先我们想

    2023年04月21日
    浏览(45)
  • Android 并发编程--阻塞队列和线程池

    队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。进行插入操作的端称为队尾,进行删除操作的端称为队头。 在队列中插入一个队列元素称为入队,从队列中

    2024年02月13日
    浏览(50)
  • 多线程案例 | 单例模式、阻塞队列、定时器、线程池

    单例模式 单例模式是 设计模式 的一种 什么是设计模式? 设计模式好比象棋中的 “棋谱”,红方当头炮,黑方马来跳,针对红方的一些走法,黑方应招的时候有一些固定的套路,按照套路来走局势就不会吃亏,也就发明了一组\\\"棋谱\\\",称为设计模式 软件开发中也有很多常见

    2024年02月15日
    浏览(49)
  • 【JavaEE初阶】多线程(四)阻塞队列 定时器 线程池

    概念 阻塞队列是一种特殊的队列. 也遵守 “ 先进先出 ” 的原则. 阻塞队列能是一种线程安全的数据结构, 并且具有以下特性: 当队列满的时候, 继续入队列就会阻塞, 直到有其他线程从队列中取走元素. 当队列空的时候, 继续出队列也会阻塞,直到有其他线程往队列中插入元素

    2023年04月26日
    浏览(54)
  • 深入浅出Java多线程(十三):阻塞队列

    大家好,我是你们的老伙计秀才!今天带来的是[深入浅出Java多线程]系列的第十三篇内容:阻塞队列。大家觉得有用请点赞,喜欢请关注!秀才在此谢过大家了!!! 在多线程编程的世界里,生产者-消费者问题是一个经典且频繁出现的场景。设想这样一个情况:有一群持续

    2024年03月20日
    浏览(46)
  • 【Java】多线程案例(单例模式,阻塞队列,定时器,线程池)

    ❤️ Author: 老九 ☕️ 个人博客:老九的CSDN博客 🙏 个人名言:不可控之事 乐观面对 😍 系列专栏: 单例模式是设计模式之一。代码当中的某个类,只能有一个实例,不能有多个。单例模式分为:饿汉模式和懒汉模式 饿汉模式表示很着急,就想吃完饭剩下很多碗,然后一

    2024年02月06日
    浏览(45)
  • Java 多线程系列Ⅳ(单例模式+阻塞式队列+定时器+线程池)

    设计模式就是软件开发中的“棋谱”,软件开发中也有很多常见的 “问题场景”。针对这些问题场景,大佬们总结出了一些固定的套路。按照这些套路来实现代码可能不会很好,但至少不会很差。当前阶段我们需要掌握两种设计模式: (1)单例模式 (2)工厂模式 概念/特征

    2024年02月09日
    浏览(58)
  • 多线程(初阶七:阻塞队列和生产者消费者模型)

    目录 一、阻塞队列的简单介绍 二、生产者消费者模型 1、举个栗子: 2、引入生产者消费者模型的意义: (1)解耦合 (2)削峰填谷 三、模拟实现阻塞队列 1、阻塞队列的简单介绍 2、实现阻塞队列 (1)实现普通队列 (2)加上线程安全 (3)加上阻塞功能 3、运用阻塞队列

    2024年02月05日
    浏览(40)
  • 【Linux】生产者消费者模型:基于阻塞队列和环形队列 | 单例模式线程池

    死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。 当多线程并发执行并都需要访问临界资源时,因为每个线程都是不同的执行流,这就有可能 导致数据不一致问题 ,为了避免此问题的发生

    2024年01月24日
    浏览(48)
  • 多线程学习之生产者和消费者与阻塞队列的关系

    生产者消费者问题,实际上主要是包含了两类线程: 生产者线程用于生产数据 消费者线程用于消费数据 生产者和消费者之间通常会采用一个共享的数据区域,这样就可以将生产者和消费者进行解耦, 两者都不需要互相关注对方的 Object类的等待和唤醒方法 方法名 说明 void

    2024年02月11日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包