LinkedBlockingQueue
是一个 线程安全 的 阻塞 队列,接下来就讲解一下它最常用的基本方法。
这是队列的数据结构图。
方法介绍
无参构造方法
无参构造函数,内部源码是在创建队列时默认给队列的最大长度为 int 的最大值,如果当你给这个队列传入的数据超过了 int 的最大值,就会报错。
LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue();
int 单参构造方法
int 类型单参构造方法,创建队列时给定队列的最大长度,这里需要注意的是,给定的长度不能小于等于 0,否则会报异常。
LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue(1000);
Collection 单参构造方法
创建队列时,给定队列一个集合,构造方法中会做两件事情:
第一件事是会把队列的最大长度设置成 int 的最大值
第二件事是会把给定的集合中的数据都放到队列中
Collection collection = new ArrayList();
LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue(collection);
查看队列中的元素数量
size()
LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue();
final int size = linkedBlockingQueue.size();
查看还可以往队列中放多少元素
remainingCapacity()
列如,一开始创建队列时设置队列的长度是 10,然后往该队列中存了 3 个元素,那么调用该方法就会返回 7。
LinkedBlockingQueue linkedBlockingQueue = new LinkedBlockingQueue(10);
linkedBlockingQueue.put("张三");
// 9
final int remainingCapacity = linkedBlockingQueue.remainingCapacity();
入队方法
put(E e)
往队尾中添加一个元素,如果队列已经满了则等待,直到插入队列中。
LinkedBlockingQueue<String> linkedBlockingQueue = new LinkedBlockingQueue();
linkedBlockingQueue.put("张三");
offer(E e)
往队尾中添加一个元素,如果队列已满,则返回false,插入进去返回true。
LinkedBlockingQueue<String> linkedBlockingQueue = new LinkedBlockingQueue();
// TimeUnit.MILLISECONDS 是时间格式
linkedBlockingQueue.offer("张三");
offer(E e, long timeout, TimeUnit unit)
往队列中添加一个元素并设置一个时间,这个时间是如果在规定时间内没有插入,则返回false,插入队列中返回true。
LinkedBlockingQueue<String> linkedBlockingQueue = new LinkedBlockingQueue();
// TimeUnit.MILLISECONDS 是时间格式
linkedBlockingQueue.offer("张三", 1000, TimeUnit.MILLISECONDS);
出队方法
take()
从队列的队首取出一个数据,如果队列没有数据,则一直等待,直到有数据取出为止。
LinkedBlockingQueue<String> linkedBlockingQueue = new LinkedBlockingQueue();
linkedBlockingQueue.put("张三");
String str = linkedBlockingQueue.take();
peek()
从队列的队首取出一个数据,如果队列没有数据,则返回null。
LinkedBlockingQueue<String> linkedBlockingQueue = new LinkedBlockingQueue();
linkedBlockingQueue.put("张三");
String str = linkedBlockingQueue.take();