# BlockingQueue 四组API
-
抛出异常
-
不抛异常
-
阻塞等待
-
超时等待
方式 | 抛出异常 | 有返回值 | 阻塞等待 | 超时等待 |
---|---|---|---|---|
添加 | add() | offer() | put() | offer(...) |
移除 | remove() | poll() | take() | poll(..) |
判断队列首 | element() | peek() |
package com.pa.test.JUC.queue;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;
public class BlockingQueueTest {
public static void main(String[] args) throws InterruptedException {
//test1();
//test2();
//test3();
test4();
}
/**
* 抛出异常
*/
public static void test1(){
//设置大小 3个
ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(arrayBlockingQueue.add("a"));
System.out.println(arrayBlockingQueue.add("b"));
System.out.println(arrayBlockingQueue.add("c"));
//添加第四个会有异常 java.lang.IllegalStateException: Queue full
//System.out.println(arrayBlockingQueue.add("d"));
System.out.println("===============");
System.out.println(arrayBlockingQueue.remove());
//检测队列首元素
System.out.println(arrayBlockingQueue.element());
System.out.println(arrayBlockingQueue.remove());
System.out.println(arrayBlockingQueue.remove());
//java.util.NoSuchElementException
//System.out.println(arrayBlockingQueue.remove());
}
/**
* 不抛异常 有返回值
*/
public static void test2(){
ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(arrayBlockingQueue.offer("a"));
System.out.println(arrayBlockingQueue.offer("b"));
System.out.println(arrayBlockingQueue.offer("c"));
//检测队列首元素
System.out.println(arrayBlockingQueue.peek());
//会返回false
System.out.println(arrayBlockingQueue.offer("d"));
System.out.println("==================");
System.out.println(arrayBlockingQueue.poll());
System.out.println(arrayBlockingQueue.poll());
System.out.println(arrayBlockingQueue.poll());
//返回 null
System.out.println(arrayBlockingQueue.poll());
}
/**
* 阻塞等待 (一直阻塞)
*/
public static void test3() throws InterruptedException {
ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue<>(3);
arrayBlockingQueue.put("a");
arrayBlockingQueue.put("b");
arrayBlockingQueue.put("c");
//会一直阻塞 程序不会停
//arrayBlockingQueue.put("d");
System.out.println("==================");
System.out.println(arrayBlockingQueue.take());
System.out.println(arrayBlockingQueue.take());
System.out.println(arrayBlockingQueue.take());
//会一直阻塞 程序不会停
//System.out.println(arrayBlockingQueue.take());
}
/**
* 阻塞 等待 超时
*/
public static void test4() throws InterruptedException {
ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue<>(3);
System.out.println(arrayBlockingQueue.offer("a"));
System.out.println(arrayBlockingQueue.offer("b"));
System.out.println(arrayBlockingQueue.offer("c"));
//超时2秒 自动放弃
System.out.println(arrayBlockingQueue.offer("d",2, TimeUnit.SECONDS));
System.out.println("==================");
System.out.println(arrayBlockingQueue.poll());
System.out.println(arrayBlockingQueue.poll());
System.out.println(arrayBlockingQueue.poll());
//超时2秒 自动放弃
System.out.println(arrayBlockingQueue.poll(2,TimeUnit.SECONDS));
}
}