LinkedBlockingDeque 是线程安全的,支持多线程,可以指定容器的大小
- put() : 把元素放入到队列的结尾,如果容器满了就会阻塞
- add(): 调用的offer方法向队列尾部添加元素,如果容器满了,再添加就会抛异常,暂时没找到他返回false的情况
- offer():向队列尾部添加元素,如果容器满了,有一个返回值false
- take(): 取出队列中头部的元素,同时从队列中移除,FIFO,下一个元素移动到头部成为first,如果没有数据,阻塞
- poll(): 取出队列头部的元素并移除,如果容器中没有数据,返回null
- q.poll(2, TimeUnit.SECONDS) : 取出队列头部的元素并移除,如果容器中没有数据,返回null
public static void main(String[] args) throws InterruptedException {
// 队列可以指定长度,超过长度后会进行阻塞
BlockingDeque<String> q = new LinkedBlockingDeque<>(2);
// put方法会把元素放入到队列的结尾tail,源码中方式putLast,使用的是ReentrantLock
// q.put("a");
// q.put("b");
// take 会取出队列中头部的元素,同时从队列中移除,FIFO,下一个元素移动到头部成为first
// String first = q.take();
// System.out.println(first);
// 调用的offer方法向队列尾部添加元素,如果容器满了,再添加抛异常
// q.add("d");
// q.add("e");
// boolean add = q.add("f");
// 向队列尾部添加元素,如果容器满了,有一个返回值false
// q.offer("g");
// q.offer("e");
// boolean offer = q.offer("g");
// System.out.println(offer);
// 从队列中头部的元素取数据并移除
String poll = q.poll();
System.out.println(poll);
// q.pollFirst();
// q.pollLast();
// 从队列中取数据,阻塞2秒,2秒后不管有没有数据,我都返回
System.out.println(q.poll(2, TimeUnit.SECONDS));
}