BlockingQueue
LinkedBlockingQueue,ArrayBlockingQueue
Queue:
Deque,AbstractQueue,BlockingQueue
加入和移除
1抛出异常的情况
@Test
public void test1(){
ArrayBlockingQueue arr = new ArrayBlockingQueue<>(1);
System.out.println(arr.add("A"));
// System.out.println(arr.add("B"));
//报错
System.out.println(arr.remove());
// System.out.println(arr.remove());
//报错
}
2.不抛出异常的情况
@Test
public void test2(){
ArrayBlockingQueue arr = new ArrayBlockingQueue<>(1);
System.out.println(arr.offer("A"));
System.out.println(arr.offer("A"));//false
System.out.println(arr.poll());
System.out.println(arr.poll());//null
}
3.阻塞等待
不满足的话就一直阻塞
@Test
public void test3() throws InterruptedException {
ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(1);
//一直阻塞
arrayBlockingQueue.put("A");
arrayBlockingQueue.put("B");
System.out.println(arrayBlockingQueue.take());
System.out.println(arrayBlockingQueue.take());
}
4.超时等待
@Test
public void test4() throws InterruptedException {
ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue(1);
arrayBlockingQueue.offer("A");
arrayBlockingQueue.offer("B",2, TimeUnit.SECONDS);
}