zoukankan      html  css  js  c++  java
  • 阻塞队列BlockingQueue

           阻塞队列BlockingQueue是一个接口,基于ReentrantLock ,依据它的基本原理,我们可以实现Web中二段长连接聊天功能,当然其最常用的还是用于实现生产者和消费者模式:

    BlockingQueue接口提供了以下方法:

    package java.util.concurrent;
    import java.util.Collection;
    import java.util.Queue;
    
    public interface BlockingQueue<E> extends Queue<E> {
    
       //添加元素到队列中,如果队列满了,继续插入元素会报错,IllegalStateException
        boolean add(E e);
    
       //添加元素到队列,同时会返回元素是否插入成功的状态,如果成功则返回 true
        boolean offer(E e);
    
        // 当阻塞队列满了以后,生产者继续通过 put添加元素,队列会一直阻塞生产者线程,知道队列可用
        void put(E e) throws InterruptedException;
    
        //当阻塞队列满了以后继续添加元素,生产者线程会被阻塞指定时间,如果超时,则线程直接退出
        boolean offer(E e, long timeout, TimeUnit unit)
            throws InterruptedException;
    
    // 基于阻塞的方式获取队列中的元素,如果队列为空,则 take 方法会一直阻塞,直到队列中有新的数据可以消费 E take() throws InterruptedException; //带超时机制的获取数据,如果队列为空,则会等待指定的时间再去获取元素返回 E poll(long timeout, TimeUnit unit) throws InterruptedException; // int remainingCapacity(); //当队列为空时,调用 remove 会返回 false,如果元素移除成功,则返回 true boolean remove(Object o); // public boolean contains(Object o); // int drainTo(Collection<? super E> c); // int drainTo(Collection<? super E> c, int maxElements); }

    java 8中,提供了 7个阻塞队列:

    • ArrayBlockingQueue    数组实现的有界阻塞队列,此队列按照先进先出(FIFO)的原则对元素进行排序
    • LinkedBlokingQueue    链表实现的有界阻塞队列,此队列的默认和最大长度为 Integer.MAX_VALUE。此队列按照先进先出的原则对元素进行排序
    • PriorityBlokingQueue    支持优先级排序的无界阻塞队列,默认情况下元素采取自然顺序升序排列。也可以自定义类实现compareTo() 方法来指定元素排序规则,或者初始化。
    • DelayQueue  优先级队列实现的无界阻塞队列
    • SynchronousQueue  不存储元素的阻塞队列,每一个put操作必须等待一个take操作,否则不能继续添加元素。
    • LinkedTransferQueue  链表实现的无界阻塞队列
    • LinkedBlockingDeque    链表实现的双向阻塞队列

    它们的区别主要体现在存储结构上或对元素操作上的不同,但是对于take与put操作的原理,却是类似的。

  • 相关阅读:
    使用jmeter进行api接口压力测试
    MAC OS环境下搭建基于Python语言的appium自动化测试环境
    jmeter+python可以用jython来实现
    navicat12.0.27 Mac版破解方法
    uiautomatorviewer连接机器点击报错Unexpected error while obtaining UI hierarchy
    appium+python,终端键值表
    自动化测试--Appium简单的测试demo
    appium+python搭建自动化测试框架_TestAPP框架(三)
    深入理解Java虚拟机-----第二章
    ViewModel组件
  • 原文地址:https://www.cnblogs.com/yrjns/p/12209752.html
Copyright © 2011-2022 走看看