ArrayBlockingQueue :一个由数组结构组成的有界阻塞队列
linkedBlockingQueue :一个由链表结构组成的有界阻塞队列(常用)
PriorityBlockingQueue :一个支持优先级排序的无界阻塞队列
DelayQueue: 一个使用优先级队列实现的无界阻塞队列
SynchronousQueue: 一个不存储元素的阻塞队列(常用)
linkedTransferQueue: 一个由链表结构组成的无界阻塞队列
linkedBlockingDeque: 一个由链表结构组成的双向阻塞队列
//阻塞队列4组API
public class BlockingQueue_ {
@Test
public void test1() {
BlockingQueue bq = new ArrayBlockingQueue<>(3);
System.out.println(bq.add("a"));
System.out.println(bq.add("b"));
System.out.println(bq.add("c"));
System.out.println(bq.add("d"));//抛异常
//Retrieves, but does not remove, the head of this queue.
System.out.println(bq.element());
System.out.println(bq.remove());
System.out.println(bq.remove());
System.out.println(bq.remove());
System.out.println(bq.remove());//抛异常
}
@Test
public void test2() {
BlockingQueue bq = new ArrayBlockingQueue<>(3);
System.out.println(bq.offer("d"));
System.out.println(bq.offer("e"));
System.out.println(bq.offer("f"));
System.out.println(bq.offer("g"));//返回false
System.out.println(bq.peek());
System.out.println(bq.poll());
System.out.println(bq.poll());
System.out.println(bq.poll());
System.out.println(bq.poll());//返回null
}
@Test
public void test3() throws InterruptedException {
BlockingQueue bq = new ArrayBlockingQueue<>(3);
bq.put("h");
bq.put("i");
bq.put("j");
//bq.put("k");//一直阻塞
System.out.println(bq.take());
System.out.println(bq.take());
System.out.println(bq.take());
System.out.println(bq.take());//一直阻塞
}
@Test
public void test4() throws InterruptedException {
BlockingQueue bq = new ArrayBlockingQueue<>(3);
System.out.println(bq.offer("l", 2, TimeUnit.SECONDS));
System.out.println(bq.offer("m", 2, TimeUnit.SECONDS));
System.out.println(bq.offer("n", 2, TimeUnit.SECONDS));
System.out.println(bq.offer("o", 2, TimeUnit.SECONDS));//等待定义的单位时间,如果还是无法入队列则返回false
System.out.println(bq.poll(2, TimeUnit.SECONDS));
System.out.println(bq.poll(2, TimeUnit.SECONDS));
System.out.println(bq.poll(2, TimeUnit.SECONDS));
System.out.println(bq.poll(2, TimeUnit.SECONDS));//等待定义的单位时间,如果还没有可取元素则返回null
}
}