首页 > 其他分享 >阻塞队列linkedBlockQuene和syncroBlockQuene的区别?

阻塞队列linkedBlockQuene和syncroBlockQuene的区别?

时间:2023-12-13 13:57:05浏览次数:27  
标签:插入 队列 LinkedBlockingQueue SynchronousQueue 线程 linkedBlockQuene 移除 syncroBlockQue

在Java中,LinkedBlockingQueueSynchronousQueue 是两种不同类型的阻塞队列,它们有一些关键的区别:

  1. 实现机制:

    • LinkedBlockingQueue 使用一个链表实现的有界或无界队列。有界队列的容量是固定的,而无界队列的容量理论上是无限的。
    • SynchronousQueue 是一个特殊的阻塞队列,它在内部并没有真正的容量。它的每个插入操作都必须等待另一个线程的对应移除操作,反之亦然。
  2. 容量:

    • LinkedBlockingQueue 可以有界或无界。在构造函数中可以指定容量,如果不指定,则默认是无界的。
    • SynchronousQueue 没有实际的容量,每个插入操作必须等待一个相应的移除操作。
  3. 插入和移除操作的匹配:

    • LinkedBlockingQueue 中,可以异步插入和移除元素,线程可以单方面地向队列中插入或移除元素。
    • SynchronousQueue 中,每个插入操作必须等待一个相应的移除操作,反之亦然。这使得 SynchronousQueue 更适合用于线程之间的直接交互。
  4. 用途:

    • LinkedBlockingQueue 通常用于实现生产者-消费者模式,其中一个线程负责生产,另一个线程负责消费。
    • SynchronousQueue 通常用于线程之间的直接传递数据,其中一个线程通过插入操作将数据传递给另一个线程,而不是通过队列进行中间存储。

总体而言,选择使用哪种阻塞队列取决于具体的使用场景和需求。

标签:插入,队列,LinkedBlockingQueue,SynchronousQueue,线程,linkedBlockQuene,移除,syncroBlockQue
From: https://www.cnblogs.com/guoyu1/p/17898884.html

相关文章

  • 【一个队列实现栈】Java队列——Queue接口-LinkedList实现类
    leetcode225.用队列实现栈题意:用一个队列实现栈题解:(1)弹栈:将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,然后弹出(2)获取栈顶元素:先将队头开始的前size()-1个元素全部出队然后重新入队,使队尾元素循环到队头,此时队头元素即为栈顶元素;然后再重新循环siz......
  • 【双栈实现队列】Java——Stack类
    leetcode232.用栈实现队列题意:双栈实现队列;要求每个入队、出队操作均摊O(1)复杂度题解:用一个栈in维护入队元素,另一个栈out维护出队元素出队或取队头元素:首先判断栈out是否为空,如果为空,将栈in中的元素pop()到栈out中,那么栈out栈顶元素即为原队列队头元素。(米奇妙妙屋啊~)判断......
  • 【leetcode 239. 滑动窗口最大值】Java优先队列——PriorityQueue类
    leetcode239.滑动窗口最大值题目描述:1e5大小的nums[]数组中长度为k(1<=k<=1e5)的窗口的最大值题解:暴力求解O(n^2)会超时,需要O(nlogn)的解法使用大根堆优先队列维护窗口元素,每次取最大值复杂度降为O(1),堆结构维护复杂度O(logn)问:如果维护窗口[l,r]前[0,l-1]的元素不影......
  • 数据结构---队列
    队列(Queue)是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作。这种操作方式通常被称为FIFO(FirstInFirstOut,先进先出)。队列中的插入操作也被称为入队(enqueue),而删除操作则被称为出队(dequeue)。队列中的元素只能从一端(称为队头)添加......
  • [持续更新][数据结构][算法]涵盖线性表、栈、链表、队列、图、动态规划、分治递归、回
    备考考点整理内部排序表格树的主要考点二叉树的常考紧紧抓住\(n_0=n_2+1\)\(n=n_0+n_1+n_2...n_m\)\(n=n_1+2*n_2+3*n_3...m*n_m\)+1哈夫曼树没有度为1的结点,也就是\(n_1=0\)完全二叉树常考总结最大岛屿问题(dfs模板)#include<iostream>#include<algorith......
  • day12栈与队列
    239.滑动窗口最大值;347.前K个高频元素;总结1滑动窗口最大值1.1思路封装一个deque类:主要构造pop、push的逻辑然后使用循环来进行遍历,更新最大值1.2代码二刷补充2前K个高频元素给定一个非空的整数数组,返回其中出现频率前k高的元素。示例1:输入:nums=[1,1,1,......
  • C++U4-第08课-队列
    队列:顺序队列 队列基本操作 选择题1 选择题2 程序阅读题     打疫苗 【算法分析】用数组实现队列,按题意模拟即可。【参考代码】#include<iostream>usingnamespacestd;stringq[1010];intf,r;//f前端,指向队头,r后端,指向队尾的后......
  • 栈和队列
    前言这里我们主要介绍手写栈和队列。虽然有STL里的分装好的数据结构,但是因为封装好的数据结构跑得会很比较慢(比如deque),所以我们最好手写。正文普通栈栈是一种后入先出的数据结构,它主要有三种功能:往栈里加入一个元素从栈头弹出一个元素查询栈顶端的元素。所谓后......
  • 循环队列
    一、循环队列环形队列,有两个指针:头指针和尾指针。在队尾写入,移动尾指针;从队列头部读取,移动头指针。环形队列,其特殊性在于"环形",内存空间可以不断重复使用,无需频繁分配和释放内存。通常,我们用一个固定长度的数组来实现循环队列。示意图:1.初始化循环队列初始化:创建一个空的......
  • 架构核心技术之分布式消息队列
    Java全能学习+面试指南:https://javaxiaobear.cn今天我们来学习分布式消息队列,分布式消息队列的知识结构如下图。主要介绍以下内容:同步架构和异步架构的区别。异步架构的主要组成部分:消息生产者、消息消费者、分布式消息队列。异步架构的两种主要模型:点对点模型和发布订阅模型......