天天看点

BlockingQueue的四组api测试

BlockingQueue(阻塞队列)

先看继承结构:

BlockingQueue的四组api测试

从图中看出BlockingQueue属于集合;

主要使用场景:多线程并发处理,线程池

使用:4组api

方法 抛异常 不抛出异常,有返回值 阻塞 超时
插入方法 add(o) offer(o) put(o) offer(o, timeout, timeunit)
移除方法 remove() poll() take() poll(timeout, timeunit)
检查方法 element() peek()

测试1.:add(o) remove(o) element()

1. add(o) 当增加超过队列数量报出异常
public class BlockingQueueDemo {
    public static void main(String[] args) {
        //队列长度
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);
        blockingQueue.add(1);
        blockingQueue.add(1);
        blockingQueue.add(1);
        blockingQueue.add(1);
    }
}

           
BlockingQueue的四组api测试
1.2 remove() 当队列为空时去取报出异常
public class BlockingQueueDemo {
    public static void main(String[] args) {
        //队列长度
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);
        blockingQueue.remove();

    }
}
           
BlockingQueue的四组api测试
1.3 element() 当队列为空时去检查报出异常
public class BlockingQueueDemo {
    public static void main(String[] args) {
        //队列长度
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);
        Object element = blockingQueue.element();
        System.out.println(element);
    }
}
           
BlockingQueue的四组api测试

测试2:offer(o) poll() peek()

2.1 offer() 当队列增加超出队列长度时返回false,poll()取完时返回null,,peek()首元素为空时返回null
public class BlockingQueueDemo {
    public static void main(String[] args) {
        //队列长度
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);
        System.out.println(blockingQueue.offer(1));
        System.out.println(blockingQueue.offer(1));
        System.out.println(blockingQueue.offer(1));
        System.out.println(blockingQueue.offer(1));
        //取值
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        System.out.println(blockingQueue.poll());
        //检擦首元素
        System.out.println(blockingQueue.peek());
    }
}

           
BlockingQueue的四组api测试

测试3:put(o) 当队列增加超出队列长度时会一只阻塞, take()

3.1 put(o)

public class BlockingQueueDemo {
    public static void main(String[] args) throws InterruptedException {
        //队列长度
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);
        blockingQueue.put(1);
        blockingQueue.put(1);
        blockingQueue.put(1);
        blockingQueue.put(1);

    }
}
           
BlockingQueue的四组api测试

3.2 take()

public class BlockingQueueDemo {
    public static void main(String[] args) throws InterruptedException {
        //队列长度
        ArrayBlockingQueue blockingQueue = new ArrayBlockingQueue<>(3);
        blockingQueue.put(1);
        blockingQueue.put(1);
        blockingQueue.put(1);
        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());
        System.out.println(blockingQueue.take());
    }
}

           
BlockingQueue的四组api测试

offer(o, timeout, timeunit),poll(timeout, timeunit)

类似第三组 唯一区别就是可以设置等待时间,如果超时则退出