首页 > 其他分享 >并发队列

并发队列

时间:2024-03-05 23:34:02浏览次数:18  
标签:容量 队列 阻塞 并发 线程 SynchronousQueue

并发队列

目录

为什么要使用队列

image-20240305230936971

并发队列简介

  • Queue
  • BlockingQueue(阻塞队列)

image-20240305231115950

阻塞队列BlockQueue

什么是阻塞队列

  • 简介、地位

    • 阻塞队列是具有阻塞功能的队列,所以它首先是一个队列其次是具有阻塞功能。
    • 通常,阻塞队列的一端是给生产者放数据用,另一端给消费者拿数据用。阻塞队列是线程安全的,所以生产者和消费者都可以是多线程的
  • 阻塞功能:最有特色的两个带有阻塞功能的方法是

    • take()方法:获取并移除队列的头结点,一旦如果执行take的时候,队列里无数据,则阻塞,直到队列里有数据。
    • put()方法:插入元素。但是如果队列已满,那么就无法继续插入,则阻塞,直到队列里有了空闲空间。
  • 是否有界(容量有多大):这是一个非常重要的属性,无界队列意味着里面可以容纳非常多(Integer.MAX VALUE,约为2的31次,是非常大的一个数,可以近似认为是无限容量)。

  • 阻塞队列和线程池的关系:阻塞队列是线程池的重要组成部分

BlockingQueue主要方法

  • put、take
  • add、remove、element
  • offer、poll、peek

ArrayBlockingQueue

  • 有界
  • 指定容量
  • 公平:还可以指定是否需要保证公平,如果想保证公平的话那么等待了最长时间的线程会被优先处理,不过这会同时带来一定的性能损耗。

LinkedBlockingQueue

  • 无界
  • 容量Integer.MAX_VALUE
  • 内部结构:Node、两把锁。

PriorityBlockingQueue

  • 支持优先级
  • 自然顺序(而不是先进先出)
  • 无界队列
  • PriorityQueue的线程安全版本

SynchronousQueue

  • 它的容量为0
  • 需要注意的是,SynchronousQueue的容量不是1而是0,因为SynchronousQueue不需要去持有元素,它所做的就是直接传递(direct handoff)

SynchronousQueue注意点

image-20240305232435206

DelayQueue

  • 延迟队列,根据延迟时间排序
  • 元素需要实现Delayed接口,根据排序规则

非阻塞队列ConcurrentLinkedQueue

image-20240305232546884

如何选择自己的队列

  • 边界
  • 空间
  • 吞吐量

标签:容量,队列,阻塞,并发,线程,SynchronousQueue
From: https://www.cnblogs.com/shine-rainbow/p/18055551

相关文章

  • (34/60)柠檬水找零、根据身高重建队列、用最少数量的箭引爆气球
    柠檬水找零leetcode:860.柠檬水找零贪心法思路遍历一遍数组,只关注面值5、10的钞票的数量每轮判断:如果是5,five++;如果是10,判断还有没有5,有的话five--;如果是20,检查有没有一张10、一张5,ten--,five--。或者三张5,five-=3。贪心:先消耗面值10的钞票,因为它更万能。复杂度分析时间......
  • 多线程系列(十三) -一文带你搞懂阻塞队列
    一、摘要在之前的文章中,我们介绍了生产者和消费者模型的最基本实现思路,相信大家对它已经有一个初步的认识。在Java的并发包里面还有一个非常重要的接口:BlockingQueue。BlockingQueue是一个阻塞队列,更为准确的解释是:BlockingQueue是一个基于阻塞机制实现的线程安全的队列。通......
  • 一文讲明白Java中线程与进程、并发与并行、同步与异步
    写在开头ok,everybody,在过去的两周内,我们大体上讲完了Java的集合,在最后我们探讨了关于HashMap线程不安全的原因,又提出了ConcurrentHashMap这个线程安全的集合解决方案,那么在接下来的2-3周内,我们就一起来学习一下Java中的并发多线程。在开始学习之前,我们必须要搞清楚几个概念:线程......
  • 并发容器精讲——面试杀手锏
    并发容器精讲——面试杀手锏目录并发容器精讲——面试杀手锏并发容器概览趣说集合类的历史——古老和过时的同步容器ConcurrentHashMap(重点、面试常考)为什么HashMap是线程不安全的?HashMap1.7结构HashMap1.8结构HashMap关于并发的特点JDK1.7ConcurrentHashMap实现和分析JDK1......
  • laravel8 + redis 队列
      执行命令生成job: phpartisanmake:job自定义名称修改queue.php配置文件'redis'=>['driver'=>'redis','connection'=>'queue',【databases.php中单独配置一个redis的链接名为queue】'queue'=>en......
  • Unity3D 渲染队列 ZTest与ZWrite详解
    在Unity3D中,渲染队列(RenderingQueue)是一个非常重要的概念,它决定了游戏中各个物体的渲染顺序和优先级。而在渲染队列中,ZTest和ZWrite又是两个关键的参数,它们决定了物体在渲染的过程中如何处理深度测试和深度写入。本文将详细介绍Unity3D中的渲染队列、ZTest和ZWrite的概念,并给出相......
  • 算法-栈和队列
    1.用栈实现队列(LeetCode232)题目:请你仅使用两个栈实现队列。队列应当支持一般队列支持的所有操作(push、pop、peek、empty):实现MyQueue类:voidpush(intx)将元素x推到队列的末尾intpop()从队列的开头移除并返回元素intpeek()返回队列开头的元素booleanempty()......
  • 多线程系列(十一) -浅析并发读写锁StampedLock
    一、摘要在上一篇文章中,我们讲到了使用ReadWriteLock可以解决多线程同时读,但只有一个线程能写的问题。如果继续深入的分析ReadWriteLock,从锁的角度分析,会发现它有一个潜在的问题:如果有线程正在读数据,写线程准备修改数据的时候,需要等待读线程释放锁后才能获取写锁,简单的说就是,读......
  • SpringCloud Alibaba-5-并发访问
    微服务架构应用设计目的为了应对高并发环境!1.什么是并发,并行并发:指在同一时间段内,多个任务或进程同时执行或交替执行的能力。并行:指多个任务在同一时间段内同时执行,需要多个处理器或多核处理器来实现。总的来说,并发更多地强调任务之间的交替执行,而并行更多地强调任务的同......
  • 第二节:栈相关(二叉树展开为链表、逆波兰表达式、两栈实现队列结构)
    一.        二.        三.         !作       者:Yaopengfei(姚鹏飞)博客地址:http://www.cnblogs.com/yaopengfei/声     明1:如有错误,欢迎讨论,请勿谩骂^_^。声     明2:原创博客请在转载......