zoukankan      html  css  js  c++  java
  • BlockingQueue

    BlockingQueue是双缓冲队列。BlockingQueue内部使用两条队列,允许两个线程同时向队列一个存储,一个取出操作。在保证并发安全的同时,提高了队列的存取效率。
     
    1:当Queue为空时,获取元素线程被阻塞直到Queue变为非空;
    2:当Queue满时,添加元素线程被阻塞直到Queue不满。BlockingQueue不允许元素为null,如果入队一个null元素,会抛NullPointerException。常用于生产者消费者模式。
     
    抛出异常
    返回特殊值
    阻塞
    超时
    入队
    add(e)
    offer(e)
    put(e) 
    offer(e, time, unit)
    出队
    remove()
    poll()
    take()
    poll(time, unit)
    检查
    element()
    peek()
     
     
    add(E e):将元素e插入到队列末尾,如果插入成功,则返回true;如果插入失败(即队列已满),则会抛出异常;
      remove():移除队首元素,若移除成功,则返回true;如果移除失败(队列为空),则会抛出异常;
      offer(E e):将元素e插入到队列末尾,如果插入成功,则返回true;如果插入失败(即队列已满),则返回false;
      poll():移除并获取队首元素,若成功,则返回队首元素;否则返回null;
      peek():获取队首元素,若成功,则返回队首元素;否则返回null;
    put方法用来向队尾存入元素,如果队列满,则等待;
      take方法用来从队首取元素,如果队列为空,则等待;
      offer方法用来向队尾存入元素,如果队列满,则等待一定的时间,当时间期限达到时,如果还没有插入成功,则返回false;否则返回true;
      poll方法用来从队首取元素,如果队列空,则等待一定的时间,当时间期限达到时,如果取到,则返回null;否则返回取得的元素;
     
    JDK提供的阻塞队列:
        ArrayBlockingQueue: 基于数组实现的一个阻塞队列,在创建ArrayBlockingQueue对象时必须制定容量大小。并且可以指定公平性与非公平性,默认情况下为非公平的,即不保证等待时间最长的队列最优先能够访问队列。
        LinkedBlockingQueue: 基于链表实现的一个阻塞队列,在创建LinkedBlockingQueue对象时如果不指定容量大小,则默认大小为Integer.MAX_VALUE。
        PriorityBlockingQueue: 以上2种队列都是先进先出队列,而PriorityBlockingQueue却不是,它会按照元素的优先级对元素进行排序,按照优先级顺序出队,每次出队的元素都是优先级最高的元素。注意,此阻塞队列为无界阻塞队列,即容量没有上限(通过源码就可以知道,它没有容器满的信号标志),前面2种都是有界队列。
        DelayQueue: 基于PriorityQueue,一种延时阻塞队列,DelayQueue中的元素只有当其指定的延迟时间到了,才能够从队列中获取到该元素。DelayQueue也是一个无界队列,因此往队列中插入数据的操作(生产者)永远不会被阻塞,而只有获取数据的操作(消费者)才会被阻塞。
        SynchronousQueue:一个不存储元素的阻塞队列。
        LinkedTransferQueue:一个由链表结构组成的无界阻塞队列。
        LinkedBlockingDeque:一个由链表结构组成的双向阻塞队列。
  • 相关阅读:
    08.Python网络爬虫之图片懒加载技术、selenium和PhantomJS
    07.验证码处理
    Python网络爬虫第三弹《爬取get请求的页面数据》
    设计模式【十】—— 访问者模式
    设计模式【九】—— 模板方法模式/命令模式
    设计模式【八】—— 代理模式
    设计模式【七】—— 外观模式/享元模式
    设计模式【六】—— 装饰者模式/组合模式
    设计模式【五】—— 适配器模式/桥接模式
    设计模式【四】—— 建造者模式
  • 原文地址:https://www.cnblogs.com/gqymy/p/10303368.html
Copyright © 2011-2022 走看看