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

Java队列

大家好,又见面了,我是你们朋友全栈君。 从初学者角度,认真地学习Java队列使用和设计。...堆栈方法等同于Deque方法如下表所示: 强烈建议不要在队列插入null ,因为null是队列某些方法返回值,具有特殊意义,比如队列没有元素了。...该队列对元素FIFO(先进先出)进行排序。队列开头是已在队列停留最长时间元素。队列尾部是最短时间位于队列元素。新元素插入到队列尾部,并且队列检索操作在队列开头获取元素。...这是经典“有界缓冲区”,其中固定大小数组包含由生产者插入并由消费者提取元素。创建后,容量将无法更改。试图将一个元素放入一个完整队列将导致操作阻塞(put方法)。...,jdkjava.util.concurrent.ScheduledThreadPoolExecutor.ScheduledFutureTask就是一个实现DelayQueue接口子类

62710

java阻塞队列

我们可以使用以下代码创建一个公平阻塞队列: ArrayBlockingQueue fairQueue = new ArrayBlockingQueue(1000,true); LinkedBlockingQueue...队列使用PriorityQueue来实现。队列元素必须实现Delayed接口,在创建元素时可以指定多久才能从队列获取当前元素。只有在延迟期满时才能从队列中提取元素。...队列Delayed必须实现compareTo来指定元素顺序。比如让延时时间最长放在队列末尾。...在初始化LinkedBlockingDeque时可以初始化队列容量,用来防止其再扩容时过渡膨胀。另外双向阻塞队列可以运用在“工作窃取”模式。...让我们先来看看JDK是如何实现。 使用通知模式实现。所谓通知模式,就是当生产者往满队列里添加元素时会阻塞住生产者,当消费者消费了一个队列元素后,会通知生产者当前队列可用。

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

Java阻塞队列

一丶什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个可以进行阻塞插入和阻塞移除附加方法队列。 1)阻塞插入:当队列满后,队列会阻塞(拒绝)插入元素,直到队列不满。...---- 二丶JDK提供7个阻塞队列 ArrayBlockingQueue:由数组结构组成有界阻塞队列 LinkedBlockingQueue:由链表结构组成有界阻塞队列 PriorityBlockingQueue...:支持优先级排序无界阻塞队列 DelayQueue:使用优先级队列实现无界阻塞队列 SynchronousQueue:不存储元素阻塞队列 LinkedTransferQueue:由链表结构组成无界阻塞队列...LinkedBlockingDeque:由链表结构组成双向阻塞队列 三丶阻塞队列实现原理 介绍过阻塞队列后博主想到第一个应用就是生产者和消费者场景,阻塞队列是如何实现,那我们可以想象一下用一般多线程是如何实现生产者和消费者场景...java.io.Serializable { ...... } public boolean add(E e) { return super.add(e); } 这个直接继承了父类

85960

聊聊Java并发队列 有界队列和无界队列区别

,内部使用 队列来实现公平性调度,使用栈来实现非公平调度,在Java6时替换了原来锁逻辑,使用CAS代替了 上面三个队列他们也是存在共性  put take 操作都是阻塞 offer...等集合类并发修改异常,通俗说就是遍历时修改不会抛异常 PriorityBlockingQueue 具有优先级阻塞队列 DelayedQueue 延时队列,使用场景  缓存:清掉缓存超时缓存数据...中就有所体现,并且并发大神 Doug Lea 对其进行了极致优化,使用15个对象填充,加上本身4字节,总共64字节就可以避免缓存行伪共享问题,其实现细节较为复杂,可以说一下大致过程: ...比如消费者线程从一个队列取元素,发现队列为空,他就生成一个空元素放入队列 , 所谓空元素就是数据项字段为空。...直到一个生产者线程意欲向队例中放入一个元素,这里他发现最前面的元素数据项字段为 NULL,他就直接把自已数据填充到这个元素,即完成了元素传送。

2.4K10

JavaMap双边队列

V> –| class HashMap 哈希表结构 –| class TreeMap 底层是树形结构,存储要求K有对应排序方式 Map双边队列中键(Key)是唯一,但是值...extends V> map); 存入另一个Map双边队列,并且要求添加Map双边对接K和V都要和当前Map存储 K和V一致 删: remove(Object k); 删除对应K键...(Key)值(Value)对 改: put(K k, V v); 对应当前K存在,修改对应内容 查: int size(); 当前Map双边队列,有效键值对个数 boolean isEmpty...Value是否存在 Set keySet(); 返回整个Map双边队列中所有Key对应Set集合 【注意】 一个方法使用set结尾,表示该方法返回是一个集合类型,大多是情况下都 是Set类型...Map中提供了一个方法 Set> entrySet 返回值是键值对类对象Set集合 Set集合存储是Entry类型 Entry类型是带有泛型 import java.util.HashMap

1K20

Java栈和队列

在现实我们也有类似的场景,那就是子弹发射,最后装填进去子弹是最先发射出去。 2.2栈使用 在Java栈又是如何使用呢?有以下这些方法。...2.5栈、虚拟机栈、栈帧区别 栈(Stack):在Java,栈是一种数据结构,它遵循后进先出(LIFO)原则。...局部变量表存储了编译期可知各种基本数据类型及对象引用类型变量。栈帧随方法调用而创建,随方法执行完毕而销毁。...3.2队列使用 在Java,Queue是个接口,其底层是通过链表来实现。...Deque是一个接口,使用时必须创建LinkedList对象。 在实际情况,使用Deque接口是比较多,栈和队列均可使用该接口, 总结 栈和队列是构建更复杂数据结构基础,如二叉树、图、堆等。

8110

Java创建对象方式

1 问题 作为Java开发者,经常创建很多对象,你是否知道Java创建对象有哪些方式呢? 2 方法 (1)new关键字 使用new关键字创建对象,是最常见也是最简单创建对象方式。...(4)Clone 无论何时我们调用一个对象clone方法,JVM就会创建一个新对象,将前面的对象内容全部拷贝进去,用clone方法创建对象并不会调用任何构造函数。...(5)反序列化 当我们序列化和反序列化一个对象,JVM会给我们创建一个单独对象。在反序列化时,JVM创建对象并不会调用任何构造函数。...目前我们所学内容,对new关键字方法有了一些具体掌握,举例如下: Scanner s = new Scanner(System.in);应用new创建对象,进行对象实例化 import java.util.Scanner...,我们一共找到了5种方法,本次着重探讨new关键字创建对象方法,通过在idea上大量地实验,证明该方法是有效

1.7K10

创建Java线程池

线程是Java一大特性,它可以是给定指令序列、给定方法定义变量或者一些共享数据(类一级变量)。...在 Java不同线程具有不同优先级,高优先级线程可以安排在低优先级线程之前完成。如果多个线程具有相同优先级,Java会在不同线程之间切换 运行。...,如果每当一个请求到达就创建一个新线程,开销是相当大。...另外,通过适当地调整线程池中 线程数目可以防止出现资源不足情况。 创建一个线程池 一个比较简单线程池至少应包含线程池管理 器、工作线程、任务队列、任务接口等部分。...,将没有处理任务放在任务队列;任务接口是每个任务必须实现接口,主要用来规定任务入口、任务执行完后收尾工作、任务执 行状态等,工作线程通过该接口调度任务执行。

88520

Java并发编程:JDK阻塞队列

上次我们讲了一些常用4个阻塞队列,但是在JDK还提供了其他一些阻塞队列。这篇文章将全面介绍一下JDK所有阻塞队列,并比较他们区别。   JDK7提供了7个阻塞队列。...分别是   ArrayBlockingQueue :一个由数组结构组成有界阻塞队列。   LinkedBlockingQueue :一个由链表结构组成有界阻塞队列。   ...PriorityBlockingQueue :一个支持优先级排序无界阻塞队列。   DelayQueue:一个使用优先级队列实现无界阻塞队列。   ...SynchronousQueue:一个不存储元素阻塞队列。   LinkedTransferQueue:一个由链表结构组成无界阻塞队列。   ...参考资料: http://www.infoq.com/cn/articles/java-blocking-queue/

646100

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

本文转发自:https://blog.csdn.net/u012881904/article/details/51491736 阻塞队列与普通队列区别在于,当队列是空时,从队列获取元素操作将会被阻塞...试图从空阻塞队列获取元素线程将会被阻塞,直到其他线程往空队列插入新元素。...同样,试图往已满阻塞队列添加新元素线程同样也会被阻塞,直到其他线程使队列重新变得空闲起来,如从队列移除一个或者多个元素,或者完全清空队列. 1.ArrayDeque, (数组双端队列) 2....生产者-消费者设计是围绕阻塞队列展开,生产者把数据放入队列,并使数据可用,当消费者为适当行为做准备时会从队列获取数据。...虽然生产者-消费者模式可以把生产者和消费者代码相互解耦合,但是它们行为还是间接地通过共享队列耦合在一起了 类库包含一些BlockingQueue实现,其中LinkedBlockingQueue和

3.1K20

Java数据结构(三):队列(下)

“人生苦短,不如养狗” 阻塞队列 基本概念 ThreadPoolExecutor阻塞队列 总结 阻塞队列   上一次我们谈论了队列基本原理和Java常见队列,今天我们来谈论一个较为特殊队列—...让我们来看看源码对于阻塞队列介绍: * A {@link java.util.Queue} that additionally supports operations * that wait for...super E> c):该方法是用于将队列元素全部转移至指定容器,但是当执行该方法同时向目标集合增加元素时会发生错误 int drainTo(Collection<?...具有优先级阻塞队列 总结   以上就是对Java队列一点总结,当然本文和上一篇中介绍队列基本以单向队列为主。...在实际工作,我们可能还会需要使用双向队列,那么就可从Deque实现类寻找合适双向队列。   相信大家在看完这两篇介绍队列文章之后,应该对队列这一数据结构以及Java实现队列有了一些了解。

24630

Java数据结构(二):队列(上)

“ 人生苦短,不如养狗” 队列 基本概念 Java中常见队列 应用 队列 基本概念   队列,是一种只能在一端(队尾)插入,另一端(队首)删除有序线性表。...Java中常见队列 1. ArrayDeque ArrayDeque就是使用上面说动态循环数组来实现。...首先,来看一下队列成员变量: /** * The array in which the elements of the deque are stored....和ArrayDeque实现方式不同,AQSCLH队列是使用链表来实现。所以这里我们需要将关注一下链表结点是如何实现。...CLH queues need a dummy header node to get started   当然这个队首元素不会在构造器创建,而是实际产生等待资源线程之后进行实际队列创建时才会进行创建

38810

JavaBlockingQueue1 Java阻塞队列2 生产者和消费者例子2 Java阻塞队列

1 Java阻塞队列 1.1 简介 一种支持两个附加操作队列,是一系列阻塞队列接口 当存取条件不满足时,阻塞在操作处 队列满时,阻塞存储元素线程,直到队列可用 队列空时,获取元素线程会等待队列非空...,每个消费者消费10个产品 可以看到,当队列满时,所有生产者被阻塞 当队列空时,所有消费者被阻塞 代码还用到了AtomicInteger原子整数,用来确保产品编号不会混乱 2 Java阻塞队列...这在长时间内需要高效并发地处理大批量数据系统,其对于GC影响还是存在一定区别。而在创建ArrayBlockingQueue时,我们还可以控制对象内部锁是否采用公平锁,默认采用非公平锁。...都是FIFO队列 正如其他Java集合一样,链表形式队列,其存取效率要比数组形式队列高 但是在一些并发程序,数组形式队列由于具有一定可预测性,因此可以在某些场景获得更好效率 另一个不同点在于...,有可能先阻塞线程最后才访问队列 为保证公平性,通常会降低吞吐量.我们可以使用以下代码创建一个公平阻塞队列 ArrayBlockingQueue fairQueue = new ArrayBlockingQueue

1.5K71
领券