展开

关键词

Java队列

队列是一个先入先出的数据结构(FIFO)队列接口和set,List是同级的。都继承了collection接口。 LinkedList实现了双端接口队列deque。 加入到 Queue 中的元素根据它们的天然排序(通过其 java.util.Comparable 实现)或者根据传递给构造函数的 java.util.Comparator 实现来定位。 Java并发CAS 指的是现代 CPU 广泛支持的一种对内存中的共享数据进行操作的一种特殊指令。 首 先,CPU 会将内存中将要被更改的数据与期望的值做比较。 Compare and Set 广泛使用在 Java 5 中的 Atomic 类中,其它的诸如 ReetrantLock、Semaphore 等的类也通过 AbstractQueuedSynchronizer 阻塞队列 java.util.concurrent 中加入了 BlockingQueue 接口和五个阻塞队列类。如果队列中没有空间进行阻塞,直到空间可用。

26620

java队列

Java 实现队列 介绍 队列为特殊的线性表,队列的特点先进先出(FIFO),队列插入为入队,队列删除为出对。 Java 实现 这次使用顺序队列实现。(使用数组), why? 即front和rear两个解决 时间复杂度 O(n) 涉及一层循环,此时时间复杂度为O(n) 又因为直接更改下标,会导致空间的浪费,(出队操作)此时,为了减少空间的浪费,将队列设计为循环队列,目的,避免假满现象的出现 空队列的时候 front = rear = 0 入队 front = 0 rear = 1 此时继续入队 front = 0 rear = 2 出队 front = rear = 2 两者相等 继续入队 int size(); // 判断队列是否为空 boolean isEmpty(); // 判断队列是否已满 boolean isFull(); // 入队, 成功true 错误false void cleameQueue(); } 实现接口的类 package demo.mingm.struct.queue; import java.util.Arrays; import java.util.Vector

66000
  • 广告
    关闭

    腾讯云618采购季来袭!

    腾讯云618采购季:2核2G云服务器爆品秒杀低至18元!云产品首单0.8折起,企业用户购买域名1元起,还可一键领取6188元代金券,购后抽奖,iPhone、iPad等你拿!

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

    Java阻塞队列

    什么是阻塞队列 原文地址为,转载请注明出处! 阻塞队列是一个支持阻塞的插入和移除的队列。 支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元素的线程,直到队列不满。 阻塞队列用法 阻塞队列常用于生产者和消费者的场景,生产者是向队列里添加元素的线程,消费者是从队列里获取元素的线程。 当队列为空时,如果消费者线程从队列里take元素。 超时退出:当阻塞队列满时,如果生产者线程往队列里插入元素,队列会阻塞生产者线程一段时间,如果超过了指定时间,生产者线程就会退出。 如果是无界阻塞队列队列则不会出现满的情况。 :一个由链表结构组成的双向阻塞队列 1.ArrayBlockingQueue 此队列按照先进先出(FIFO)的原则对元素进行排序 默认情况下不保证线程公平地访问队列(所谓公平是指当队列可用时,先被阻塞的线程先访问队列

    20720

    java队列,ArrayBlockingQueue

    int count;//容器的大小  final ReentrantLock lock;//显示锁  private final Condition notEmpty;//用来做线程通信,若队列已空则阻塞 lock.lockInterruptibly(); try { while (count == items.length) notFull.await();//队列满了阻塞

    32370

    Java 队列详解

    非阻塞队列 没有实现的阻塞接口的 LinkedList:实现了 java.util.Queue 接口 和 java.util.AbstractQueue 接口。 加入到 Queue 中的元素根据它们的天然排序(通过其 java.util.Comparable 实现)或者根据传递给构造函数的 java.util.Comparator 实现来定位。 在 Java 中,BlockingQueue 的接口位于 java.util.concurrent 包中(在 Java 5 版本开始提供),由上面介绍的阻塞队列的特性可知,阻塞队列是线程安全的。 有边界的意思是它的容量是有限的,我们必须在其初始化的时候指定它的容量大小,容量大小一旦指定就不可改变。 所有插入 PriorityBlockingQueue 的对象必须实现 java.lang.Comparable 接口,队列优先级的排序规则就是按照我们对这个接口的实现来定义的。

    10320

    java并发队列之阻塞队列-ArrayBlockingQueue

    正文 什么是阻塞队列 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列。这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空。当队列满时,存储元素的线程会等待队列可用。 阻塞队列常用于生产者和消费者的场景,生产者是往队列里添加元素的线程,消费者是从队列里拿元素的线程。阻塞队列就是生产者存放元素的容器,而消费者也只从容器里拿元素。 阻塞队列有哪些? <E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable { /** put(e)队列未满时,直接插入没有返回值;队列满时会阻塞等待,一直等到队列未满时再插入。 version v1.3 * @date 2018-12-22 1:28 PM * @since v8.0 **/ import org.testng.annotations.Test; import java.util.concurrent

    38320

    Java面试——阻塞队列

    一、阻塞队列 ---- 【1】首先它是一个队列,而一个阻塞队列在数据结构中所起的作用大致如下图所示: ? 2); //正常插入2个 blocking.add("a"); blocking.add("b"); //add 第三个是出现如下错误 java.lang.IllegalStateException ,使用remove,出现如下错误 java.util.NoSuchElementException //blocking.remove(); //如果为空值,则抛出 java.util.NoSuchElementException blocking.element(); } } 【2】特殊值:使用插入方法 offer() 向阻塞队列中插入值时 当阻塞队列为空时,消费者线程试图从队列中 take 元素,队列会一直阻塞消费者线程直到队列可用。

    13720

    java 队列的使用

    java 队列的使用 在Java的并发包中已经提供了BlockingQueue BlockingQueue 队列常用的操作方法:       1.往队列中添加元素: add(), put(), offer()       2.从队列中取出或者删除元素: remove() element ()  peek()   poll()  take() 每个方法的说明如下: offer()方法往队列添加元素如果队列已满直接返回false,队列未满则直接插入并返回true; add()方法是对offer ()方法的简单封装.如果队列已满,抛出异常new IllegalStateException("Queue full"); put()方法往队列里插入元素,如果队列已经满,则会一直等待直到队列为空插入新元素 ,返回null; take()方法取出并删除队头的元素,当队列为空,则会一直等待直到队列有新元素可以取出,或者线程被中断抛出异常;offer()方法一般跟pool()方法相对应, put()方法一般跟

    11730

    Java 延时队列 DelayQueue

    概述 java延迟队列提供了在指定时间才能获取队列元素的功能,队列头元素是最接近过期的元素。 PriorityQueue 使用的排序方式是队列元素的compareTo方法,优先级队列存放顺序是从小到大的,所以队列元素的compareTo方法影响了队列的出队顺序。 获取队列元素: 阻塞与非阻塞获取 阻塞出队列 当 first 元素还没到出队列的时间,就一直等待,直到返回。 代码实践示例 package i.juc import java.lang.Thread.sleep import java.time.LocalDateTime import java.time.format.DateTimeFormatter import java.util.concurrent.DelayQueue /** * @author: Jack * 2020-05-27 16:44 */ fun main(args:

    51620

    算法——Java实现队列

    顺序队列: 概念: 队列是一种先进先出的线性表,只允许在一端插入,另一端删除。 : 概念: 顺序队列的不足:顺序队列在进行插入操作时,直接在队尾插入就可以,此时时间复杂度为O(1),但是在出列是在队头,即下标为0的位置,也就意味着队列中所有的元素都得向前移动,此时时间复杂度为0(n 队列出列时不需要所有的元素都移动,引入两个指针即可,一个头指针front指向队头元素,一个尾指针rear指向队尾元素,此时队列出列只需移动指针即可。 但是此种情况下会出现一种溢出情况(如下图),此时队列中任然是有空间的可以存放元素的,但是尾指针已经溢出,于是就有了循环队列。 front指向队头,rear指向队尾的下一个位置;队为空的判断:front==rear;队为满的判断:(rear+1)%MAXSIZE==front 实现循环队列: 1 /** 2 * java

    5230

    java队列实现

    package queue; public class Queue { public int maxSize; private int[] array; ...

    39360

    java - 手写队列

    手写队列 package com.jiafupeng.test; /** * @author jiafupeng * @desc * @create 2021/4/10 15:59 * @update : no node to take at com.jiafupeng.test.MyQueue.take(MyQueue.java:38) at com.jiafupeng.test.MyQueue.main (MyQueue.java:77) 2. : no node to pop at com.jiafupeng.test.MyStack.pop(MyStack.java:38) at com.jiafupeng.test.MyStack.main (MyStack.java:77)

    15130

    java进阶|java队列源码分析

    今天我要分享的是java里面比较常见的数据结构队列的源码分析,队列,先进先出模式,即FIFO的特点,日常生活中队列的特点也随处可见,超市购物排队,餐厅排队买饭等一系列都满足了队列的先进先出的特点,java ,写到了内存空间的分配的字样,想到了自己学习c语言的模样,那个拿着大部书《C语言程序设计》前往机房的少年,由于兴趣使然,逐渐走上了javaWeb的开发了,不过这里说明一点,学习c语言对于你理解高级语言java 何况java作为一门高级语言呢,顺势而为成就了这个语言令人喜欢的特点吧。 四,队列既然有入队,想必就会想到队列出队的方法,即poll方法,接下来我们继续看下队列出队的方法时间吧。 然后将队列的队头元素置为null,这样便于垃圾收集器进行资源的回收,但是这里没有写到let's gc ,怎么和集合不一样呢,然后队列元素前置一位,并且判断队列是否在整个队列的范围内,这是比较重要的,将获取的元素进行返回 八,队列这个数据结构可以像栈一样只返回队列的队首元素,但是不出队。

    22920

    疯狂java笔记之栈和队列队列双端队列

    java集合中的栈 Java集合实际上提供两种栈供开发者使用: java.util.Stack:它就是一个最普通的顺序栈,底层数据实现。 这个Stick类是线程安全的,在多线程环境下也可以放心使用 java.util.LinkedList:LinkedList是一个双端链表:除此之外。 queue_linked_delete.PNG Java集合中的队列 从JDK1.5开始,java的集合框架中提供了一个queue接口,该接口代表了一个队列,实现该接口的类可以当成队列使用。 Queue里包含了6个方法,用于代表队列包含的3个标志性的方法,如下所示: 插入:在队列的rear端插入元素 移除:在队列的front端删除元素 访问:访问队列的front端元素 Java为上面的每个方法方法提供了两个版本 事实上,LinkedList几乎是Java集合框架中方法最多的类。 ?

    57330

    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

    56740

    Java 循环队列的实现

    队列概念   队列(Queue)是限定只能在一端插入、另一端删除的线性表。允许删除的一端叫做队头(front),允许插入的一端叫做队尾(rear),没有元素的队列称为“空队列”。    队列具有先进先出(FIFO)的特性。   普通顺序队列存在的问题     在普通顺序队列中,入队的操作就是先将尾指针rear右移一个单位,然后将元素值赋值给rear单位。 显然,必须要解决这一块假溢出的问题,否则顺序队列就没有太多使用价值。   循环队列     循环队列的存储结构,头、尾指针都和普通顺序队列相同。 不同的只是将队列视为“环状结构”,即data[0]为紧接着data[MaxLen-1]的单元,为相邻的元素,首位成为一个环。结构如下: ? (来自:百科) 代码实现   全局变量:定义队列长度 static int MaxLen;   循环队列基本数据结构的实现: static class myQueue{ int

    83830

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

    此外,ArrayBlockingQueue的容量是有限的,数组的大小在初始化时就固定了,不会随着队列元素的增加而出现扩容的情况,也就是说ArrayBlockingQueue是一个“有界缓存区”。 public class ArrayBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable 对于阻塞式插入来说,当队列中的元素已满时,则会将此线程停止,让其处于等待状态,直到队列中有空余位置产生。 // 则返回队列头部,并从队列中删除。 null : extract(); } finally { lock.unlock(); } } //返回队列的头部元素,并从队列中删除。

    2.2K30

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

    public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, java.io.Serializable ,如果队列中没有元素,则此线程的等待,直到队列中有元素才执行。 //从队列头部获取元素,并返回。 LinkedBlockingQueue底层基于链表实现,无需使用者指定队列长度(可自定义),当使用默认大小时候,是一个无界队列。 ArrayBlockingQueue由于默认必须设置队列长度,所以在使用时会能更好的预测系统性能;而LinkedBlockingQueue默认无参构造,无需指定队列长度,所以在使用时一定要多加注意,当队列中元素短时间内暴增时

    1.4K90

    Java优先队列(PriorityQueue)示例

    我们知道队列是遵循先进先出(First-In-First-Out)模式的,但有些时候需要在队列中基于优先级处理对象。 客户向这个应用程序发送请求时,实际上就进入了队列。我们需要首先处理优先客户再处理普通用户。在这种情况下,Java的PriorityQueue(优先队列)会很有帮助。 PriorityQueue是基于优先堆的一个无界队列,这个优先队列中的元素可以默认自然排序或者通过提供的Comparator(比较器)在队列实例化的时排序。 优先队列要求使用Java Comparable和Comparator接口给对象排序,并且在排序时会按照优先级处理其中的元素。 优先队列的头是基于自然排序或者Comparator排序的最小元素。 当我们获取队列时,返回队列的头对象。 优先队列的大小是不受限制的,但在创建时可以指定初始大小。当我们向优先队列增加元素的时候,队列大小会自动增加。

    1.2K30

    Java数据结构——队列

    文章目录 前言 一、队列 1.概念 2.Java当中的队列 3.实例化对象 4.双端队列 (Deque) 5.队列的常用方法 二、Java实现简单队列 三、循环队列 设计循环队列 循环队列的具体实现 2.Java当中的队列 我们来看一下Java集合当中的有关队列的相关接口和类   我们可以看到 Queue 队列这个接口 底层可以是链表或者 顺序表来实现的 ,而在Java当中队列使用双端队列来进行维护的 (queue.isEmpty()); 运行结果 二、Java实现简单队列   队列也可以数组和链表的结构实现,使用链表的结构实现更优一些,因为如果使用数组的结构,出队列在数组头上出数据,效率会比较低。   实际中我们有时还会使用一种队列叫循环队列。 环形队列通常使用数组实现 设计循环队列 我们就借助一道题来开启今天的设计循环队列吧… 这道题让我们来设计一个循环队列,并且把相关方法给实现 我们先来简单了解一下循环队列的结构 循环队列的底层其实是一个数组

    16330

    相关产品

    • 消息队列 CMQ 版

      消息队列 CMQ 版

      消息队列 CMQ 版(TDMQ CMQ 版)是一种分布式消息队列服务,它能够提供可靠的,基于消息的异步通信机制,能够将分布式部署的不同应用(或同一应用的不同组件)中的信息传递,存储在可靠有效的 CMQ 队列中,防止消息丢失。TDMQ CMQ 版支持多进程同时读写,收发互不干扰,无需各应用或组件始终处于运行状态。

    相关资讯

    热门标签

    活动推荐

      运营活动

      活动名称
      广告关闭

      扫码关注云+社区

      领取腾讯云代金券