ArrayBlockingQueue
也称为有界队列
基于数组的阻塞队列实现
内部,维护了一个定长数组,便于缓存队列中的数据对象
内部,没有实现读写分离,意味着生产者、消费者不能完全并行
长度需要定义,不指定会报错
可以指定先进先出,或者先进后出
package com.bjsxt.base.coll013;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
import javax.swing.text.html.HTMLDocument.Iterator;
public class UseQueue {
public static void main(String[] args) throws Exception {
ArrayBlockingQueue<String> array = new ArrayBlockingQueue<String>(5);
array.put("a");
array.put("b");
array.add("c");
array.add("d");
array.add("e");
System.out.println(array.offer("a", 3, TimeUnit.SECONDS));
}
}
3秒之内
如果,a元素加进去了,返回true
如果,a元素没有加进去,返回false
运行
package com.bjsxt.base.coll013;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;
import javax.swing.text.html.HTMLDocument.Iterator;
public class UseQueue {
public static void main(String[] args) throws Exception {
ArrayBlockingQueue<String> array = new ArrayBlockingQueue<String>(5);
array.put("a");
array.put("b");
array.add("c");
array.add("d");
array.add("e");
array.add("f");
System.out.println(array.offer("a", 3, TimeUnit.SECONDS));
}
}
定义长度为5
添加6个元素,直接报错
运行