JAVA中常见的阻塞队列详解

2021-02-06  本文已影响0人  平凡的柚子

并发队列

阻塞队列特点

take方法

put方法

是否有界(容量有多大)

阻塞队列常见方法

分类 方法 含义 特点
抛出异常 add 添加一个元素 如果队列已满,添加则抛出 IllegalStateException 异常
remove 删除队列头节点 当队列为空后,删除则抛出 NoSuchElementException 异常
element 获取队列头元素 当队列为空时,则抛出 NoSuchElementException 异常
返回无异常 offer 添加一个元素 当队列已满,不会报异常,返回 false ,如果成功返回 true
poll 获取队列头节点,并且删除它 当队列空时,返回 Null
peek 单纯获取头节点 当队列为空时反馈 NULL
阻塞 put 添加一个元素 如果队列已满则阻塞
take 返回并删除头元素 如果队列为空则阻塞

抛异常类型[add、remove、element]

add

        BlockingQueue queue = new ArrayBlockingQueue(2);
        queue.add(1);
        queue.add(2);
        queue.add(3);

remove

    private static void groupRemove() {
        BlockingQueue queue = new ArrayBlockingQueue(2);
        queue.add("i-code.online");
        System.out.println(queue.remove());
        System.out.println(queue.remove());
    }

element

    private static void groupElement() {
        BlockingQueue queue = new ArrayBlockingQueue(2);
        queue.add("i-code.online");
        System.out.println(queue.element());
        System.out.println(queue.element());
    }
    private static void groupElement2() {
        BlockingQueue queue = new ArrayBlockingQueue(2);
        System.out.println(queue.element());
    }
image

无异常类型[offer、poll、peek]

offer

    private static void groupOffer() {
        BlockingQueue queue = new ArrayBlockingQueue(2);
        System.out.println(queue.offer("i-code.online"));
        System.out.println(queue.offer("云栖简码"));
        System.out.println(queue.offer("AnonyStar"));
    }

true
true
false

poll

    private static void groupPoll() {
        BlockingQueue queue = new ArrayBlockingQueue(2);
        System.out.println(queue.offer("云栖简码")); //添加元素
        System.out.println(queue.poll()); //取出头元素并且删除
        System.out.println(queue.poll());

    }
true
null

peek

    private static void groupPeek() {
        BlockingQueue queue = new ArrayBlockingQueue(2);
        System.out.println(queue.offer(1));
        System.out.println(queue.peek());
        System.out.println(queue.peek());
    }
    private static void groupPeek2() {
        BlockingQueue queue = new ArrayBlockingQueue(2);
        System.out.println(queue.peek());
    }

阻塞类型[put、take]

put

take

常见的阻塞队列

ArrayBlockingQueue

public ArrayBlockingQueue(int capacity) {...}
public ArrayBlockingQueue(int capacity, boolean fair) {...}

LinkedBlockingQueue

SynchronousQueue

PriorityBlockingQueue

DelayQueue

public interface Delayed extends Comparable<Delayed> {
    long getDelay(TimeUnit unit);
}
上一篇 下一篇

猜你喜欢

热点阅读