基于链表的队列LinkedBlockingQueue学习

LinkedBlockingQueue为先进先出队列

1.链表中的节点,next为后继节点
    static class Node<E> {
        E item;
        Node<E> next;
        Node(E x) { item = x; }
  }

2.三种构造方法a.容量为最大值 b.容量为指定大小 c.容量为最大值,使用Collection c初始化队列
  public LinkedBlockingQueue() {this(Integer.MAX_VALUE);}
  public LinkedBlockingQueue(int capacity) {......}
  public LinkedBlockingQueue(Collection<? extends E> c) {......}

3.常用方法add(),offer(),put(),poll(),peek(),clear()
    add():调用父类AbstractQueue中的方法,父类调用LinkedBlockingQueue.offer(e)方法
    public boolean add(E e) {
           if (offer(e))
               return true;
           else
               throw new IllegalStateException("Queue full");
        }
        offer():等待指定时间插入一个元素,如果时间到元素还没有添加进去就返回false。
     Inserts the specified element at the tail of this queue, waiting if necessary up to the specified wait time for
     space to become available.
            public boolean offer(E e) {......}
            public boolean offer(E e, long timeout, TimeUnit unit){......}
        put():Inserts the specified element at the tail of this queue, waiting if necessary for space to become available.
            public void put(E e){......}
        poll():Removes a node from head of queue.
            public E poll() {......}
            public E poll(long timeout, TimeUnit unit) {......}  
            如果队列数量等于0,等待指定时间后返回null
        peek():查看队列的头,并不移除该元素
            public E peek() {return first.item;}
        clear():Atomically removes all of the elements from this queue.
            public void clear() {......}

时间: 2024-12-31 03:40:10

基于链表的队列LinkedBlockingQueue学习的相关文章

数据结构 - 基于链表的队列

基于链表的队列 当我们基于链表实现队列时,需要从一端加元素,另一端取出元素,就需要引入一个新的变量tail指向链表的尾部,此时,向尾部进行添加操作时间复杂度会变为O(1),然而删除操作还是需要从head向后遍历,所以此时选择链表尾为队尾,链表头为队首. 基于链表的实现的源码如下: package queue; import linkedList.LinkedList; public class LinkedListQueue<E> implements Queue<E> {    

数据结构之——基于链表的队列的C++模板实现

//节点的结构 template<typename T> struct node { T data; node<T>* next; node():next(nullptr){}; node(T t):data(t),next(nullptr){}; } //模板类构造队列类 template<typename T> Class Myqueue { public: Myqueue():head(nullptr),tail(nullptr),count(0) { head=

深入剖析java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue

关联文章: 深入理解Java类型信息(Class对象)与反射机制 深入理解Java枚举类型(enum) 深入理解Java注解类型(@Annotation) 深入理解Java类加载器(ClassLoader) 深入理解Java并发之synchronized实现原理 Java并发编程-无锁CAS与Unsafe类及其并发包Atomic 深入理解Java内存模型(JMM)及volatile关键字 剖析基于并发AQS的重入锁(ReetrantLock)及其Condition实现原理 剖析基于并发AQS的共

atitit. java queue 队列体系and自定义基于数据库的队列总结o7t

atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLinkedQueue 2 4. BlockingQueue阻塞队列 2 4.1. 1. ArrayBlockingQueue 3 4.2. 2. LinkedBlockingQueue 3 4.3. 3. DelayQueue 3 4.4. 4. PriorityBlockingQueue 3 4.5. 

队列 LinkedBlockingQueue

1 api java.util.concurrent包下的新类.LinkedBlockingQueue就是其中之一,是一个阻塞的线程安全的队列,底层采用链表实现. LinkedBlockingQueue构造的时候若没有指定大小,则默认大小为Integer.MAX_VALUE,当然也可以在构造函数的参数中指定大小.LinkedBlockingQueue不接受null. 添加元素的方法有三个:add,put,offer,且这三个元素都是向队列尾部添加元素的意思. 区别: add方法在添加元素的时候,

atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t

atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t 1. 堵塞队列和非堵塞队列 1 2. java.util.Queue接口. 1 3. ConcurrentLinkedQueue 2 4. BlockingQueue堵塞队列 2 4.1. 1. ArrayBlockingQueue 3 4.2. 2. LinkedBlockingQueue 3 4.3. 3. DelayQueue 3 4.4. 4. PriorityBlockingQueue 3 4.5.

java并发之阻塞队列LinkedBlockingQueue与ArrayBlockingQueue

Java中阻塞队列接口BlockingQueue继承自Queue接口,并提供put.take阻塞方法.两个主要的阻塞类实现是ArrayBlockingQueue和LinkedBlockingQueue.阻塞队列的主要方法 public interface BlockingQueue<E> extends Queue<E> { //将指定的元素插入到此队列的尾部(如果立即可行且不会超过该队列的容量) //在成功时返回 true,如果此队列已满,则抛IllegalStateExcept

阻塞队列LinkedBlockingQueue和并发队列ConcurrentLinkedQueue

LinkedBlockingQueue: public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable 此队列按 FIFO(先进先出)排序元素.队列的头部 是在队列中时间最长的元素.队列的尾部 是在队列中时间最短的元素.新元素插入到队列的尾部,并且队列检索操作会获得位于队列头部的元素. 链接队列的吞吐量通常要高于基于数组的队列,

c++ timer基于win消息队列

能够承载10w个timer通信执行,说关闭就关闭,里面用了一个比較巧妙的线程处理,呵呵10W个timer就10多个线程,请大牛不要笑话,供新手学习之用 #pragma once #include <Windows.h> typedef void (CALLBACK* UXTIMERCALLBACK)(DWORD,void*); #include <map> #define G_UXTimerQueue (CUXTimer::GetInstance()) //------------