首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

java阻塞队列阻塞队列 和普通队列区别是什么?

本文转发自:https://blog.csdn.net/u012881904/article/details/51491736 阻塞队列与普通队列区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞...,或者队列是满时,往队列里添加元素的操作会被阻塞。...试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。...同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列. 1.ArrayDeque, (数组双端队列) 2...., (基于链表的FIFO双端阻塞队列) 8.PriorityBlockingQueue, (带优先级的无界阻塞队列) 9.SynchronousQueue (并发同步阻塞队列阻塞队列和生产者-消费者模式

3.3K20

Java阻塞队列

什么是阻塞队列 原文地址为,转载请注明出处! 阻塞队列是一个支持阻塞的插入和移除的队列。 支持阻塞的插入方法:意思是当队列满时,队列阻塞插入元素的线程,直到队列不满。...支持阻塞的移除方法:意思是队列为空时,获取元素(同时移除元素)的线程会被阻塞,等到队列变为非空。...阻塞队列用法 阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里获取元素的线程。...如果是移除方法,则是从队列中取出一个元素,没有则返回null。 一直阻塞:当阻塞队列满时,如果生产者线程往队列里面put元素,则生产者线程会被阻塞,知道队列不满或者响应中断退出。...阻塞队列 ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列 LinkedBlockingQueue:一个由链表结构组成的有界阻塞队列 PriorityBlockingQueue:一个支持优先级排序的无界阻塞队列

49920
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Java并发编程:阻塞队列

    Java并发编程:阻塞队列   在前面几篇文章中,我们讨论了同步容器(Hashtable、Vector),也讨论了并发容器(ConcurrentHashMap、CopyOnWriteArrayList)...本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻塞队列的实现原理,最后给出了一个实际例子和几个使用场景。   ...请尊重作者劳动成果,转载请标明原文链接:    http://www.cnblogs.com/dolphin0520/p/3932906.html 一.几种主要的阻塞队列   自从Java 1.5之后,...在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个:   ArrayBlockingQueue:基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小...参考资料:   《Java编程实战》 http://ifeve.com/java-blocking-queue/ http://endual.iteye.com/blog/1412212 http

    1K40

    Java集合--阻塞队列(引言)

    Java多线程编程中,生产者消费者模型,想必大家都在熟悉不过了,简单来说就是一部分线程负责向容器中生产,而另一部分线程负责从容器中获取。 在这个模型当中,Java主要利用队列的数据结构进行实现。...为了保证数据的安全,Java提供了两种线程安全的Queue队列,分为阻塞队列和非阻塞队列(并发队列)。...下面,我们就具体来说说阻塞队列额非阻塞队列的不同实现! 5.7.1 阻塞队列 在具体讲解阻塞队列之前,需要先跟大家明确一个概念! 什么是阻塞队列?...这就是阻塞队列。 直白的来说:队列满时,生产线程停止生产;队列空时,消费线程停止活动。 阻塞队列怎么进行阻塞操作 对于队列(集合)来说,最常用的操作,无疑只有两类,一种是添加操作,一种是移除操作!...在Java中,java.util.concurrent包提供了很多阻塞队列的实现。 其中,包括: ArrayBlockingQueue:一个由数组结构组成的有界阻塞队列

    1K120

    Java集合--阻塞队列(BlockingQueue)

    1 BlockingQueue 在此章节中,我们会对阻塞队列进行详细的介绍。 如果你对队列还不熟悉,可以先去看下以下几篇文章,或许对你的入门有所启发!...Java集合--Queue队列介绍 Java集合--Queue(Java中实现1) Java集合--Queue(Java中实现2) 在讲解ArrayBlockingQueue之前,我们先来介绍下它的父类...BlockingQueue BlockingQueue是一个接口,是所有阻塞队列的父类,定义了阻塞队列的主要操作方法。...:插入元素,如果队列满了,就直接返回false; 获取方法: element(继承父类):如果队列为空,直接抛出异常(底层调用peek方法); peek(继承父类):如果队列为空,则返回null; 移除方法...: remove:移除对应元素,如果队列为空,则返回false; take:移除元素,如果队列为空,则一直等待; poll:移除元素,如果队列为空,则返回null; BloeckingQueue成员

    64670

    java中的阻塞队列

    阻塞队列 阻塞队列 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。...移除方法,则是从队列里拿出一个元素,如果没有则返回null ·一直阻塞:当阻塞队列满时,如果生产者线程往队列里put元素,队列会一直阻塞生产者线程,直到拿到数据,或者响应中断退出。...当队列空时,消费者线程试图从队列里take元素,队列也会阻塞消费者线程,直到队列可用。 ·超时退出:当阻塞队列满时,队列阻塞生产者线程一段时间,如果超过一定的时间,生产者线程就会退出。...默认情况下不保证访问者公平的访问队列, 所谓公平访问队列是指阻塞的所有生产者线程或消费者线程,当队列可用时,可以按照阻塞的先后顺序访问队列,即先阻塞的生产者线程,可以先往队列里插入元素,先阻塞的消费者线程...和transfer方法的区别是tryTransfer方法无论消费者是否接收,方法立即返回。而transfer方法是必须等到消费者消费了才返回。

    87720

    java并发队列阻塞队列-ArrayBlockingQueue

    前言 今天讲阻塞队列阻塞队列有很多,这篇文章只讲解ArrayBlockingQueue,其他的大同小异。...正文 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。...阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。 阻塞队列有哪些?...注意,此阻塞队列为无界阻塞队列,即容量没有上限(通过源码就可以知道,它没有容器满的信号标志),前面2种都是有界队列。... extends AbstractQueue implements BlockingQueue, java.io.Serializable { /**

    92020

    阻塞队列与非阻塞队列

    使用线程安全队列的场景有很多,Java在实现同步机制时,多线程对竞争资源进行操作时,同一时刻只能有一个线程可以操作,其他线程进行阻塞等待,这时,需要使用一种容器队列来装载等待的线程,在入队和出队时候保证线程的安全性...Java提供两种方式来实现阻塞式和非阻塞式,阻塞式使用锁实现,非阻塞式使用CAS方式实现。使用阻塞队列和非阻塞队列的场景还有很多,比较常用的就是我们常说的生产者\消费者模型。...阻塞队列 Java提供了一个阻塞队列的接口——BlockingQueue,在队列的基础上增加可阻塞添加元素和可阻塞获取元素的方法。 ? ?...Java提供了一个双端阻塞队列的接口——BlockingDeque,BlockingDeque接口继承自BlockingQueue接口,BlockingDeque定义了对于队列的操作是包含对队尾和队首尾部分别进行入队和出队的操作...BlockingDeque是接口定义,LinkedBlockingDeque是Java提供的唯一实现类,下面我们通过源码分析双端阻塞队列的实现算法。 ?

    3.1K30

    java阻塞队列得实现

    阻塞队列与普通队列的不同在于。当队列是空的时候,从队列中获取元素的操作将会被阻塞,或者当队列满时,往队列里面添加元素将会被阻塞。...试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列插入新的元素。...同样,试图往已满的阻塞队列中添加新元素的线程同样也会被阻塞,直到其他的线程使队列重新变得空闲起来,如从队列中移除一个或者多个元素,或者完全清空队列,下图展示了如何通过阻塞队列来合作: image.png...线程1往阻塞队列中添加元素,而线程2从阻塞队列中移除元素 从5.0开始,JDK在Java.util.concurrent包里提供了阻塞队列的官方实现。...尽管JDK中已经包含了阻塞队列的官方实现。 阻塞队列的实现 阻塞队列的实现类似于带上限的Semaphore的实现。

    47230

    Java中的阻塞队列

    一丶什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除的附加方法的队列。 1)阻塞插入:当队列满后,队列阻塞(拒绝)插入元素,直到队列不满。...2)阻塞移除:当队列为空时,队列阻塞(拒绝)移除元素,直到队列里有元素。...:支持优先级排序的无界阻塞队列 DelayQueue:使用优先级队列实现的无界阻塞队列 SynchronousQueue:不存储元素的阻塞队列 LinkedTransferQueue:由链表结构组成的无界阻塞队列...LinkedBlockingDeque:由链表结构组成的双向阻塞队列 三丶阻塞队列的实现原理 介绍过阻塞队列后博主想到的第一个应用就是生产者和消费者场景,阻塞队列是如何实现的,那我们可以想象一下用一般的多线程是如何实现生产者和消费者场景的...的实现: public class ArrayBlockingQueue extends AbstractQueue implements BlockingQueue, java.io.Serializable

    89360

    Java并发阻塞队列之ArrayBlockingQueue

    JUC简介 在 Java 5.0 提供了java.util.concurrent(简称JUC)包,在此包中增加了在并发编程中很常用的工具类,用于定义类似于线程的自定义子系统,包括线程池,异步IO和轻量级任务框架...阻塞队列,是指多线程访问竞争资源时,当竞争资源已被某线程获取时,其它要获取该资源的线程需要阻塞等待; ArrayBlockingQueue是按FIFO(先进先出)原则对元素进行排序,元素都是从尾部插入到队列...void put(E e) // 返回在无阻塞的理想情况下(不存在内存或资源约束)此队列能接受的其他元素数量。...构造函数中this.items对应的代码为: /** The queued items */ final Object[] items; 这是存储阻塞队列数据的数组。...package com.secbro2.juc; import java.util.Queue; import java.util.concurrent.ArrayBlockingQueue; /*

    39420

    Java阻塞队列学起来!

    本文公众号来源:crossoverJie 作者:crossoverJie 分享一篇关于Java阻塞队列的文章~ 前言 较长一段时间以来我都发现不少开发者对 jdk 中的 J.U.C(java.util.concurrent...)也就是 Java 并发包的使用甚少,更别谈对它的理解了;但这却也是我们进阶的必备关卡。...自己实现 在自己实现之前先搞清楚阻塞队列的几个特点: 基本队列特性:先进先出。 写入队列空间不可用时会阻塞。 获取队列数据时当队列为空时将阻塞。...实现队列的方式多种,总的来说就是数组和链表;其实我们只需要搞清楚其中一个即可,不同的特性主要表现为数组和链表的区别。 这里的 ArrayBlockingQueue 看名字很明显是由数组实现。.../ArrayQueue.java

    55340

    Java并发编程之阻塞队列

    但是有了阻塞队列就不一样了,它会对当前线程产生阻塞,比如一个线程从一个空的阻塞队列中取元素,此时线程会被阻塞直到阻塞队列中有了元素。...本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法,接着分析了阻塞队列的实现原理,最后给出了一个实际例子和几个使用场景。   ...一.几种主要的阻塞队列   二.阻塞队列中的方法 VS 非阻塞队列中的方法   三.阻塞队列的实现原理   四.示例和使用场景 若有不正之处请多多谅解,并欢迎批评指正。...一.几种主要的阻塞队列 自从Java 1.5之后,在java.util.concurrent包下提供了若干个阻塞队列,主要有以下几个: ArrayBlockingQueue:基于数组实现的一个阻塞队列,...2.阻塞队列中的几个主要方法: 阻塞队列包括了非阻塞队列中的大部分方法,上面列举的5个方法在阻塞队列中都存在,但是要注意这5个方法在阻塞队列中都进行了同步措施。

    42220

    Java 7 种阻塞队列详解

    它和 List 的区别在于,List可以在任意位置添加和删除元素,而Queue 只有两个操作: 把元素添加到队列末尾; 从队列头部取出元素。...,而线程 2 从阻塞队列中移除元素 当阻塞队列是空时,从队列中获取元素的操作将会被阻塞。...Java 里的阻塞队列 [007S8ZIlly1ge6zgkm1lxj31j10f6gm6.jpg] Collection的子类除了我们熟悉的 List 和 Set,还有一个 Queue,阻塞队列 BlockingQueue...阻塞队列提供的常用方法 抛出异常: 当阻塞队列满时,再往队列里 add 插入元素会抛出 java.lang.IllegalStateException: Queue full 异常; 当队列为空时,从队列里...(ArrayBlockingQueue 内部的阻塞队列是通过 ReentrantLock 和 Condition 条件队列实现的, 所以 ArrayBlockingQueue 中的元素存在公平和非公平访问的区别

    9.1K32

    Java并发阻塞队列BlockingQueue概览

    BlockingQueue java.util.concurrent包下的 BlockingQueue 接口规范了一个放数据、取数据都是线程安全的队列。...一个线程往队列生产数据,另一个队列消耗数据 生产线程会持续生产新的实例放入队列中,直到队列容量达到指定值。也就是说,如果队列数据大小达到队列可以容纳的上限,那么生产线程会一致阻塞。...直到消费线程开始消耗队列中的数据。 消费线程会持续从队列获取数据,直到队列为空就会阻塞,直至有生产线程方数据到队列中。...Java BlockingQueue 的使用实例 我们使用 ArrayBlockingQueue 这个实现类来使用java中的阻塞队列。...这是为了演示让Consumer阻塞,直到等到Producer放入新值到队列中去。

    31320

    Java并发-22.阻塞队列

    阻塞队列(BlockingQueue)是一种支持两个附加操作的队列: 支持阻塞的插入:队列满时,队列阻塞插入元素的线程,直到队列不满 支持阻塞的溢出:队列空时,获取元素的线程等待队列变为非空 常见于生产者和消费者场景...阻塞队列不可用后,有四种处理方式: 处理方式 抛出异常 返回特殊值 一直阻塞 超时退出 插入方法 add(e) offer(e) put(e) offer(e, time,unit) 移除方法 remoe...超时退出 无界阻塞队列永远不满,put和offer方法永远不阻塞,offer永远返回true 1、 Java中的阻塞队列 Java中有7中阻塞队列: ArrayBlockingQueue:数组结构的有界阻塞队列...DelayQueue:使用优先级队列实现的无界阻塞队列 支持延时获取元素 用PriorityQueue实现 队列中元素必须实现Delay接口 创建对象时初始化基本数据 实现getDelay方法...,队列不可用,通过LockSupport.park(this)来阻塞生产者 调用setBlocker前先保存将要阻塞的线程,然后unsafe.park阻塞当前线程

    38120
    领券