美文网首页
Java队列

Java队列

作者: 轻易流逝 | 来源:发表于2018-07-17 13:49 被阅读0次

    阻塞队列

    方法 表现
    添加元素:
    boolean add(E e); 成功返回true。
    如果队列已满,抛异常IllegalStateException。
    boolean offer(E e); 成功返回true。
    失败返回false。
    如果队列已满,直接返回false
    void put(E e) throws InterruptedException; 如果队列已满,等待空间可用
    boolean offer(E e, long timeout, TimeUnit unit)
    throws InterruptedException;
    成功返回true。
    失败返回false。
    如果队列已满,等待timeout时间返回结果。
    移出队头
    E remove(); 移除队列头部并将其返回。
    如果队列为空,抛异常NoSuchElementException。
    E poll(); 移除队列头部并将其返回。
    如果队列为空,返回null
    E take() throws InterruptedException; 移除队列头部并将其返回。
    如果队列为空,等待直到有元素可移出
    E poll(long timeout, TimeUnit unit) throws InterruptedException; 移除队列头部并将其返回。
    如果队列为空,等待timeout时间返回结果。
    取队头
    E element(); 不移除队头,仅获取其值。
    如果队列为空,抛异常NoSuchElementException。
    E peek(); 不移除队头,仅获取其值。
    如果队列为空,返回null
    方法\处理方式 抛出异常 返回特殊值 一直阻塞 超时退出
    添加元素 add(e) offer(e) put(e) offer(e,time,unit)
    移出队头 remove() poll() take() poll(time,unit)
    取队头 element() peek() 不可用 不可用
    ArrayBlockingQueue

    一个用循环数组实现的有界阻塞队列。必须指定队列长度,按 FIFO(先进先出)原则对元素进行排序

    LinkedBlockingQueue

    一个用链表实现的有界阻塞队列。可不指定队列长度,默认为Integer.MAX_VALUE,按FIFO (先进先出) 排序元素
    吞吐量通常要高于 ArrayBlockingQueue
    Executors.newFixedThreadPool() 使用了这个队列

    SynchronousQueue

    不存储元素的阻塞队列
    每个插入操作必须等到另一个线程调用移除操作,否则插入操作一直处于阻塞状态
    吞吐量通常要高于 LinkedBlockingQueue
    Executors.newCachedThreadPool使用了这个队列

    PriorityBlockingQueue

    具有优先级的、无限阻塞队列

    相关文章

      网友评论

          本文标题:Java队列

          本文链接:https://www.haomeiwen.com/subject/zfuwpftx.html