Blocking queue
Add remove
Four sets of API
the way | Throw an exception | No exception is thrown if there is a return value | Blocking wait | Timeout waiting |
Add to | add() | offer() | put() | offer( , , ) |
Remove | remove() | poll() | take() | poll( , ) |
Judge the leader element | element() | peek() |
Throw an exception
//抛出异常
public static void test1(){
//队列的大小
ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(blockingQueue.add("a"));//true
System.out.println(blockingQueue.add("b"));//true
System.out.println(blockingQueue.add("C"));//true
System.out.println(blockingQueue.element());//查看队首元素
System.out.println("-----------------------");
//java.lang.IllegalStateException Queue full 抛出异常
// System.out.println(blockingQueue.add("d"));
System.out.println(blockingQueue.remove());//a
System.out.println(blockingQueue.element());//查看队首元素
System.out.println(blockingQueue.remove());//b
System.out.println(blockingQueue.remove());//c
//java.util.NoSuchElementException
// System.out.println(blockingQueue.remove());
}
No exception is thrown if there is a return value
//有返回值不抛出异常
public static void test2(){
ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(blockingQueue.offer("a"));//true
System.out.println(blockingQueue.offer("b"));//true
System.out.println(blockingQueue.offer("c"));//true
System.out.println(blockingQueue.peek());//查看队首元素
System.out.println(blockingQueue.offer("d"));//false 不抛出异常
System.out.println("==============");
System.out.println(blockingQueue.poll());
System.out.println(blockingQueue.poll());
System.out.println(blockingQueue.poll());
System.out.println(blockingQueue.poll());//null 不抛出异常
}
Blocking wait
//阻塞等待
public static void test3() throws InterruptedException {
ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
blockingQueue.put("a");
blockingQueue.put("b");
blockingQueue.put("c");
// blockingQueue.put("d");//队列没有位置,阻塞 一直等待
System.out.println(blockingQueue.take());
System.out.println(blockingQueue.take());
System.out.println(blockingQueue.take());
System.out.println(blockingQueue.take());//没有这个元素 一直阻塞
}
Timeout waiting
//超时等待
public static void test4() throws InterruptedException {
ArrayBlockingQueue<Object> blockingQueue = new ArrayBlockingQueue<>(3);
blockingQueue.offer("a");
blockingQueue.offer("b");
blockingQueue.offer("c");
// blockingQueue.offer("d",2, TimeUnit.SECONDS);//等待超过2秒就退出
System.out.println("==================");
System.out.println(blockingQueue.poll());
System.out.println(blockingQueue.poll());
System.out.println(blockingQueue.poll());
System.out.println( blockingQueue.poll(2,TimeUnit.SECONDS));;//等待超过2秒就退出